Specifying and implementing UI data bindings with active operations Modern GUI toolkits propose the use of declarative data bindings to link the domain data to their presentations. These approaches work fine for defining simple bindings, but require an increasing programming effort as soon as the bindings become more complex. In this paper, we propose the use of active operations for specifying and implementing UI data bindings to tackle this issue. We demonstrate that the proposed approach goes beyond the usual declarative data bindings by combining the simplicity of the declarative approaches with the expressiveness of active operations. The problem of linking domain data to their presentations has appeared very early in computer science. The Model-View-Controller (MVC) design pattern has been introduced with the SmallTalk-80 language to formalize and implement such a linking [13] . The main drawback of this pattern is that the view is bound to a specific model: the view has to observe the model and refresh its state on model changes. Consequently, applications must adapt their domain data to the specific models bound to their possible views. The Java Swing API applies such a schema; for example, displaying a collection of elements within a JTable requires adapting the collection by implementing interface TableModel [8] .. Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. The concept of data binding can be seen as an evolution of MVC that avoids such a drawback. A data binding is a "controller" that binds the model and the view: it observes the model and updates the view whenever the model changes; conversely, it observes the view and updates the model whenever the view changes. The concept of data binding is very close to the controller of the PAC model where the Controller binds the Abstraction and the Presentation [6] . Recent GUI toolkits propose the data binding as the first-class object for linking models and views. However, as this paper will illustrate, they all suffer from two main limitations: 1) they offer a limited expressiveness so that hand-programming is often required when the complexity of the bindings grows; 2) they are platform-dependent implying that a data binding written within a given GUI toolkit must be entirely rewritten to be used within another one.. In this paper, we propose the use of active operations for specifying and implementing UI data bindings. The concept of active operation extends the usual concept of operation by allowing the result of an operation to be re-evaluated afterward. For example, usual operation b := a.select(f ) constructs collection b containing each element of collection a that satisfies predicate f [18] ; the active version of this operation does more: it adds into b (respectively removes from b) any element newly added into a (respectively removed from a) that satisfies f. Active operations formalize and generalize our initial work on active transformations in the context of GUI [3, 2] ; the mathematical definition of action operations is provided in [4] .. Our proposal aims at combining the simplicity of the declarative approaches with the expressiveness of active operations, which is achieved through: a unified and platform-independent language for specifying data bindings; the use of simplified class diagrams (Ecore documents) for representing both the models and the views; a formalism for implementing the specification of bindings independently from the final implementation language; a compatibility schema with GUI toolkits.. The remainder of this paper is split into five sections. The first section presents, through three examples, our language used to specify data bindings with active operations. The second section explains why and how the specification of active operations must be translated before being implemented. The third section focuses on the implementation of active operations on GUI platforms. The fourth section introduces works related to data binding. The fifth section complements the previous section by comparing our proposal with the declarative data bindings of three representative Rich Internet Application (RIA) toolkits. The paper ends with a conclusion on our work and its perspective. This paper presents how to reap benefits from active operation expressiveness and easiness for specifying and implementing UI data bindings. Active operations offer the ability to reevaluate the result of the operations in real-time while the user interacts with the system. The proposed approach overcomes the limitations of data binding mechanisms provided by modern UI toolkits. These limitations are: GUI bindings are platformdependent and lack at defining complex bindings. It is based on a single DSL, mainly inspired by OCL, that allows both the specification and the platformindependent implementation of data bindings. Active operations have been implemented on top of the Flex RIA toolkit; the resulting ActiveFlex API offers good performance for the initial construction of active operation results, and very good ones regarding their updates.. The next step of our work is to implement a compiler that will generate active implementations from any active operation specification. Such a compiler would generate the implementations on various GUI platforms. Since our approach offers a great expressiveness, we will use and evaluate it in the context of "Information Visualization" in order to confront its performance to large models. Data binding of RIA toolkits are simple to use for simple bindings. Their binding mechanisms remain sufficient as long as the source models do not differ much from the target models. Moreover, these mechanisms allow binding to existing relational databases and/or XML documents directly, thus making them attractive in an enterprise context. In counter part, the offered binding capabilities become insufficient to address various and/or complex problems. These toolkits often require multiple artifact juggling that alter the initial simplicity of the declarative approach. Moreover, each RIA toolkit proposes its own data binding mechanism. Consequently, a binding written in WPF cannot always be translated to a Flex or JavaFX binding: they are all platform dependent and do not share a common model. The use of active operations for specifying and implementing data binding removes such limitations. A single DSL is used for specifying the bindings, and translating them before being implemented; it is thus platform-independent. The resulting implementation performances are good for the initial construction of operation results, and very good for updating these results. In counter part, active operations have to be implemented through a dedicated compiler; however, RIA toolkits also require some hidden code generation (for example, to implement paths between two bound properties). Active operations currently do not provide mechanisms for binding UI directly with databases or XML documents. However, such an issue is not specific to the domain of active operations: it concerns the serialization and deserialization of models on different data platforms. Constraint systems have been widely used for defining data bindings in the context of GUI. The Garnet toolbox proposes the use of "formula", expressed in Lisp, to bind an object value to other object values: the for-mula is reevaluated whenever the values within the formula change, like in spreadsheets [14] . The Rendezvous architecture defines the concept of "active value": an active value is a variable used as en entry point to constraint definitions (also expressed in Lisp); when the value changes, the constraint is reevaluated to reflect the change [11] . Similarly, but within a C++ infrastructure, the Amulet environment allows the definition of constraint through "formula" that bind object values [15] . However, all these constraint-based systems are limited to the binding of object values: they do not address the binding of collections, and are thus limited to simple widgets such as text-field or combo-box.. The JFace toolkit defines interfaces IObservableValue and IObservableCollection that respectively allow the observation of values and collections [9] . These interfaces are implemented in classes that can be used for representing "bindable" data in both the model and the view. This approach defines the required foundation classes for data binding; however, it is a pure programmatic approach where bindings must be implemented rather than being declared. The ObjectEditor toolkit uses a more subtle approach that consists of extending the JavaBean syntax so that data bindings appear in a more declarative way [7] . Moreover, this toolkit extends the scope of data binding to action binding that allows user actions to be bound to "do", "undo" and "redo" methods. However, ObjectEditor offers a low expressiveness regarding data binding capabilities.. RIA toolkits, such as WPF [16] , Flex [12] , and JavaFX [10] , have adopted a declarative approach to data binding. The aim of these approaches is to simplify the process of writing bindings: rather than being implemented, bindings are declared. These approaches work fine for simple bindings where the view does not differ much from the model; they however lose their simplicity as soon as the complexity of the model is increased, which often results in requiring some low level programming that contradicts the initial aim of the declarative approach. The next section focuses on proving these limitations.. Using rule-based incremental transformation languages solves the previous limitations of declarative data bindings. The incremental XSLT processor incXSLT allows the incremental execution of XSLT transformations [17] . However, XSLT concerns source XML documents and target text documents, which makes it difficult to use on various GUI platforms. Moreover, XSLT is a complex language that does not match well the required simplicity of data binding. Using a mapping language, such as Malan [5] , combines the benefits of the simplicity of data bindings and the expressiveness of transformation languages. However, this higher level approach postpones the problem of executing the mappings: for example, active operations can be generated from a mapping so that the mapping can be executed on a target platform.

O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O B O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Algorithms for processing K-closest-pair queries in spatial databases This paper addresses the problem of finding the K closest pairs between two spatial datasets (the socalled, K closest pairs query, K-CPQ), where each dataset is stored in an R-tree. There are two different techniques for solving this kind of distance-based query. The first technique is the incremental approach, which returns the output elements one-by-one in ascending order of distance. The second one is the nonincremental alternative, which returns the K elements of the result all together at the end of the algorithm. In this paper, based on distance functions between two MBRs in the multidimensional Euclidean space, we propose a pruning heuristic and two updating strategies for minimizing the pruning distance, and use them in the design of three non-incremental branch-and-bound algorithms for K-CPQ between spatial objects stored in two R-trees. Two of those approaches are recursive following a Depth-First searching strategy and one is iterative obeying a Best-First traversal policy. The plane-sweep method and the search ordering are used as optimization techniques for improving the naive approaches. Besides, a number of interesting extensions of the K-CPQ (K-Self-CPQ, Semi-CPQ, K-FPQ (the K-farthest pairs query), etc.) are discussed. An extensive performance study is also presented. This study is based on experiments performed with real datasets. A wide range of values for the basic parameters affecting the performance of the algorithms is examined in order to designate the most efficient algorithm for each setting of parameter values. Finally, an experimental study of the behavior of the proposed K-CPQ branch-and-bound algorithms in terms of scalability of the dataset size and the K value is also included. The term ''Spatial Database'' refers to a database that stores data for phenomena on, above or below the earthÕs surface [25] , or in general, various kinds of multidimensional entities of modern life (e.g. the layout of a VLSI design). In other words, a spatial database is a database system with the ability to handle geometric, geographic, or spatial data (i.e. data related to space). In a computer system, these data are represented by points, line segments, regions, polygons, volumes and other kinds of 2-d/3-d geometric entities and are usually referred to as spatial objects (from now on, simply objects). For example, a spatial database may contain polygons that represent building footprints from a satellite image, or points that represent the positions of cities, or line segments that represent roads. Spatial databases include specialized systems like Geographical databases, CAD databases, Multimedia databases, Image databases, etc. Recently, the role of spatial databases is continuously increasing in many modern applications; e.g. mapping, urban planning, transportation planning, resource management, geomarketing, archeology and environmental modeling are just some of these applications.. The key characteristic that makes a spatial database a powerful tool is its ability to manipulate spatial data, rather than simply to store and represent them. The basic form of such a database is answering queries related to the spatial properties of data. Some typical spatial queries are the following.. • A ''Point Location Query'' seeks for the objects that fall on a given point (e.g. the country where a specific city belongs).. • A ''Range Query'' seeks for the objects that are contained within a given region, usually expressed as a rectangle or a sphere (e.g. the pathways that cross a forest).. • A ''Join Query'' may take many forms. It involves two or more spatial datasets and discovers pairs (or tuples, in case of more than two datasets) of objects that satisfy a given spatial predicate [3, 19, 24, 26, 28] (e.g. the pairs of boats and stormy areas, for boats sailing across a storm). The distance join [21] was recently introduced to compute a subset of the Cartesian product of two datasets, specifying an order on the result based on distance (e.g. the pairs of hotels and archeological sites, ordered by driving distance up to 50 km between them).. • Finally, very common is the ''Nearest Neighbor Query'' that seeks for the objects residing more closely to a given object. In its simplest form, it discovers one such object (the nearest neighbor) [22, 32] . Its generalization discovers K such objects (K nearest neighbors), for a given K (e.g. the K ambulances closer to a spot where an accident with K injured persons occurred).. Branch-and-bound [23] has been the most successful technique for designing algorithms that answer queries on tree structures. Lower and upper bounding functions are the basis of the computational efficiency of branch-and-bound algorithms. Moreover, the computational behavior of this kind of algorithms is highly dependent on the searching strategy chosen, for instance Best-First and Depth-First, which are used in most situations. Numerous branch-and-bound algorithms for queries (exact query, range query, nearest neighbor query and spatial join) using spatial access methods have been studied in the literature. Here, we show how these bounding functions and searching strategies perform when they are included in branch-and-bound algorithms for a special distance-based query, the K closest pairs query.. The distance between two objects is measured using some metric function over the underlying data space. The most common metric function is the Euclidean distance. We can use the Euclidean distance for expressing the concepts of ''neighborhood'' and ''closeness''. The concept of ''neighborhood'' is related to the discovery of all objects that are ''near'' to a given query object. The concept of ''closeness'' is related to the discovery of all pairs of objects that are ''close'' to each other. In this paper, we examine a query, called ''K Closest Pairs Query'' (K-CPQ), that discovers the K pairs (K P 1) of objects formed from two datasets that have the K smallest distances between them. The K-CPQ is a combination of join and nearest neighbor queries. Like a join query, all pairs of objects are candidates for the result. Like a nearest neighbor query, proximity metrics form the basis for pruning heuristics and the final ordering.. K-CPQs are very useful in many applications that use spatial data for decision making and other demanding data handling operations. For example, the first dataset may represent the cultural landmarks of the United States, while the second set may contain the most populated places of North America (see Fig. 9 ). A K-CPQ will discover the K closest pairs of cities and cultural landmarks providing an order to the authorities for the efficient scheduling of tourist facilities creation, etc. The K value could be dependent on the budget of the authorities allocated for this purpose.. The fundamental assumption is that the two datasets are indexed by structures of the R-tree family [18] . The R-tree and its variants (R þ -tree [34] , R Ã -tree [2] , etc.) are considered as excellent choices for indexing various kinds of spatial data (points, line segments, rectangles, polygons, etc.) and have already been adopted in commercial systems (e.g. Informix [4] , Oracle [27] ). In this paper, based on distance functions between minimum bounding rectangles (MBRs) in the multidimensional Euclidean space, we present a pruning heuristic and two updating strategies for minimizing the pruning distance (i.e. the distance of the Kth closest pair found during the processing of the algorithm) and use them in the design of three different non-incremental branchand-bound algorithms for solving the K-CPQ. Two of them are recursive algorithms following a Depth-First searching strategy; the third one is iterative following a Best-First traversal policy. The plane-sweep method and the search ordering are used as optimization techniques for improving the naive approaches. Moreover, an extensive performance study, based on experiments performed with real datasets, is presented. A wide range of values for the basic parameters affecting the performance of the algorithms is examined. The outcome of the above studies is the determination of the algorithm outperforming all the others for each set of parameter values.. In addition, experimental results for three special cases of the query under consideration are examined: (1) the K self-closest pair query (K-Self-CPQ), where both datasets refer to the same entity; (2) the semi-closest pair query (Semi-CPQ), where for each object of the first dataset, the closest object of the second dataset is computed; and (3) the K-farthest pairs query (K-FPQ), finding the K farthest pairs of objects from two datasets. Besides, the scalability of the proposed algorithms is studied. That is, the increase of the I/O cost and response time of each algorithm is analyzed in terms of the dataset size and the number K of closest pairs.. The organization of this paper is as follows: Section 2 discusses the incremental and non-incremental algorithmic approaches for the CPQ, as well as the motivation of this research. In Section 3, the K-CPQ, a review of R-trees and some useful functions on pairs of MBRs are presented. In Section 4, a pruning heuristic, two updating strategies and three new non-incremental branch-and-bound algorithms for K-CPQ are introduced. Section 5 exhibits a detailed performance study of all algorithms for K-CPQs, including the effect of buffering, K-Self-CPQ, Semi-CPQ, K-FPQ and a scalability study. In Section 6, conclusions on the contribution of this paper and related future research plans are presented.

O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Segmentation of complex geophysical structures with well data In many problems of geophysical interest, when trying to segment images (i.e., to locate interfaces between different regions on the images), one has to deal with data that exhibit very complex structures. This occurs, for instance, when describing complex geophysical images (with layers, faults,...); in that case, segmentation is very difficult. Moreover, the segmentation process requires to take into account well data to interpolate, which implies integrating interpolation condition in the mathematical model.

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Type Dependencies for Logic Programs Using ACI-Unification This paper presents a new notion of typing for logic programs which generalizes the notion of directional types. The generation of type dependencies for a logic program is fully automatic and optimal with respect to a given domain of types. The analysis method is based on a novel combination of program abstraction and ACIuni cation. The method is both theoretically clean and easy to implement using general purpose tools. Type dependencies are obtained by abstracting programs, replacing concrete terms by type expressions, and evaluating the meaning of the abstract programs using a standard bottom-up interpreter for logic programs enhanced by ACI-uni cation. E ciency is maintained by choosing a non-ground semantics which results in a concise representation for types and also contributes to the persistence of analyses to changes in the underlying domain of types. The proposed method has been fully implemented and the experimental results are promising. One of the foremost impediments to providing ecient implementations of logic programming languages is the absence of the notions of types and modes in these languages. Acknowledging this state of a airs, the literature is rich in contributions with the common aim of providing adequate type and mode information to aid compilers in overcoming this obstacle (see for example 27]). Recently there has been a growing in-terest in the notion of directional types for logic programs which combine types and modes. Directional types, originally proposed in 29] and more recently in 1, 22, 8, 3, 26, 7] , have proven useful in applications such as proving termination of programs and controlling execution of programs through a delay mechanism. Directional types have a declarative aspect as well as an operational aspect prescribing not only types for the relations in a program but also the intended ways in which they will be called.. The type analyses proposed in this paper capture type dependencies which characterize the set of possible directed types of a given program and hence generalize the notion of directional types. Type dependencies are rst mentioned in 21] and are reminiscent of the implication types of 28]. The contribution of this paper is in the technique applied to infer type dependencies. The general idea is to de ne a program abstraction such that the concrete meaning of an abstract program provides the required program analysis. The technique is general and has been shown to facilitate the design and implementation of useful semantic based program analyses. For the analysis of type dependencies we propose an abstraction which replaces concrete program terms by abstract type expressions which are constructed using a binary operator which is associative, commutative and idempotent. The meaning of programs involving type expressions is formalized by enhancing a standard semantics for logic programs with ACI-uni cation 1 4, 23] . As a consequence, type inference is reduced to evaluating the meaning of an abstract program. No additional proof theory, no special inference rules and no special inference procedures are required. The justi cation of a program analysis follows by formalizing the correspondence between con-crete terms and type expressions and showing that the ACI-uni cation of type expressions mimics correctly the concrete uni cation of terms. The combination of program abstraction and ACI-enhanced concrete evaluation results in a promising technique which is both theoretically clean and easy to implement using general purpose tools.. The idea of obtaining static analyses by program abstraction is derived from ideas presented in 18, 12, 17, 11, 10] and has been applied in a variety of applications 32, 14, 16, 15] . Unique to our approach is the combination of a simple syntax directed program abstraction for types and a standard equality theory for type expressions. We pay special attention to the role of variables in abstract programs and in their semantics. It turns out, similar to the case of classic semantics for logic programs, that there is a reason for introducing variables to the underlying Herbrand base. This paper demonstrates a practical technique for determining type dependencies for logic programs. The technique is based on a simple notion of program abstraction combined with an evaluation based on semantic uni cation. This approach leads to a design in which type uni cation can be de ned using a simple extension of standard ACI-uni cation. This facilitates both implementation and formal justi cation of the analyses. In the proposed technique, no proof theory for types or special type inference rules are required. Type dependencies are obtained by evaluating the ACI-enhanced concrete meaning of its abstraction.. We have implemented a working analyzer for the technique described in this paper. The implementation is based on the simple meta-interpreter of Figure 1 enhanced by standard optimizations such as (a) considering the strongly connected components of a program's call graph and (b) performing semi-naive evaluation of the xpoint. Initial measurements show that even a plain meta-interpreter non-optimized version of the analyzer computes polymorphic type dependencies much faster than the previous work described in 10] . A standard collection of medium sized benchmarks (see 10] and 11]) have been analysed with reasonable timings. For monomorphic types all analyses are performed in less than one second; for polymorphic types most analyses are performed within a few seconds. However several of the analyses involve abstract terms with a large number of variables and indicate that further abstraction will be necessary to make our approach practical | perhaps forfeiting precision to provide type dependencies within a reasonable time. This is the topic of continuing work.

O O O B I O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Isogeometric analysis for strain field measurements In this paper, the potential of Isogeometric Analysis for strain field measurement by Digital Image Correlation is investigated. Digital Image Correlation (DIC) is a full field kinematics measurement technique based on gray level conservation principle and the formulation we adopt allows for using arbitrary displacement bases. The high continuity properties of Non-Uniform Rational B-Spline (NURBS) functions are exploited herein as an additional regularization of the initial ill-posed problem. k-refinement is analyzed on an artificial test case where the proposed methodology is shown to outperform usual finite element based DIC. Finally a fatigue tensile test on a thin aluminum sheet is analyzed. Strain localization occurs after a certain number of cycles and combination of NURBS into a DIC algorithm clearly shows a great potential to improve the robustness of non-linear constitutive law identification.

B I O O O O O O O O O O B I O B I I O B I I O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O


AN ASYMPTOTIC LOWER BOUND FOR THE MAXIMAL NUMBER OF RUNS IN A STRING An asymptotic lower bound for the maxrun function ρ(n) = max {number of runs in string x | all strings x of length n} is presented. More precisely, it is shown that for any ε > 0, (α−ε)n is an asymptotic lower bound, where α = 3 1+ √ 5 ≈ 0.927. A recent construction of an increasing sequence of binary strings "rich in runs" is modified and extended to prove the result. An important structural characteristic of a string over an alphabet is its periodicity. Repetitions (tandem repeats) have always been in the focus of the research into periodicities. The notion of runs captures maximal repetitions which themselves are not repetitions and allows for a succinct notation ( [1] ). Even though it had been known that there could be O(n log n) of repetitions in a string of length n ( [2] ), it was shown in 2000 by Kolpakov and Kucherov that number of runs was linear in the length of the input string ( [3] ). Their proof did not allow to specify the constants of linearity. The behaviour of the maxrun function ρ(n) = max{number of runs in string x | all strings x of length n} became an interest of study to many. Smyth et al. (e.g. [4] , [5] , [6] ) presented a set of conjectures about ρ(n):. 1. ρ(n) < n, 2. or in an asymptotically stronger version: lim n→∞ ρ(n) n exists and equals. 4. ρ(n) = is attained on a binary cube-free string of length n.. Recently, there has been a flurry of results concerning the upper bound of ρ(n): first Rytter set the upper bound of ρ(n) to 5n (see [7] ), which was subsequently improved by Puglisi, Simpson, and Smyth to 3.48n ( [8] ) and also by Rytter himself to 3.44n. Recently, Crochemore and Ilie ( [9] ) pushed the upper bound down to 1.6n, indicating that a further computer analysis can obtain an upper bound as low as 1.18n.. Franek, Simpson, and Smyth in [4] introduced a recursive construction of a sequence {x n : n < ∞} of binary strings increasing in length and "rich in runs" so that lim n→∞ r(x n ) |x n | = α, where α =. ≈ 0.927 and r(x) = number of runs in x. Although any such sequence does not establish a lower bound (not even an asymptotic one), it has been "viewed" as such. The assumption underneath that view is that ρ(n) behaves "reasonably", i.e. that ρ(n) does not exhibit wild jumps up, or equivalently, that ρ(n) n does not exhibit wild oscillations, which is generally expected to be the case (cf. the second conjecture). However, since the "reasonable behaviour" of ρ(n) is yet to be established, we modify and extend the method from [4] to provide formally a family of true asymptotic lower bounds arbitrarily close to αn by proving Theorem: For any ε > 0 there is a positive integer N so that for any n ≥ N ,

O O B I O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Krylov implicit integration factor methods for spatial discretization on high dimensional unstructured meshes: Application to discontinuous Galerkin methods Integration factor methods are a class of ''exactly linear part'' time discretization methods. In [Q. Nie, Y.-T. Zhang, R. Zhao, Efficient semi-implicit schemes for stiff systems, Journal of Computational Physics, 214 (2006) 521-537], a class of efficient implicit integration factor (IIF) methods were developed for solving systems with both stiff linear and nonlinear terms, arising from spatial discretization of time-dependent partial differential equations (PDEs) with linear high order terms and stiff lower order nonlinear terms. The tremendous challenge in applying IIF temporal discretization for PDEs on high spatial dimensions is how to evaluate the matrix exponential operator efficiently. For spatial discretization on unstructured meshes to solve PDEs on complex geometrical domains, how to efficiently apply the IIF temporal discretization was open. In this paper, we solve this problem by applying the Krylov subspace approximations to the matrix exponential operator. Then we apply this novel time discretization technique to discontinuous Galerkin (DG) methods on unstructured meshes for solving reaction-diffusion equations. Numerical examples are shown to demonstrate the accuracy, efficiency and robustness of the method in resolving the stiffness of the DG spatial operator for reaction-diffusion PDEs. Application of the method to a mathematical model in pattern formation during zebrafish embryo development shall be shown. High order accuracy numerical methods (e.g. weighted essentially non-oscillatory (WENO) methods, discontinuous Galerkin (DG) methods, spectral methods, etc.) are especially efficient for numerically solving problems which contain complex solution structures, and have been applied extensively in computational fluid dynamics. Efficient and high order temporal numerical schemes are important for the performance of high accuracy numerical simulations. A lot of state-of-the-art high order time-stepping methods were developed. Here we just give a few examples and it is not a complete list. For example, the total variation diminishing (TVD) Runge-Kutta (RK) schemes [54, 55, 28, 29] ; high order implicit-explicit (IMEX) multistep/Runge-Kutta methods and their applications [2, 3, 34, 36, 47, 59, 51, 68] ; spectral deferred correction (SDC) methods [9, 24, 33, 41, 42, 45] ; hybrid methods of SDC and high order RK schemes [12] ; etc. Integration factor (IF) methods are a broad class of time discretization methods which have been combined with spatial discretization methods especially spectral methods [25, 8, 10, 56] for solving various partial differential equations (PDEs). They are especially useful for many important mathematical models in fluid dynamics or biological problems which involve nonlinear PDEs with the linear highest spatial derivatives. The method of lines generates stiff systems of ordinary differential equations (ODEs) with the stiff linear terms (nonlinear terms could also be stiff, depending on different problems). Integration factor methods are a class of ''exactly linear part'' time discretization methods for the solution of this type of stiff systems. This class of methods perform the time evolution of the stiff linear operator via evaluation of an exponential function of the corresponding matrix. Hence for PDEs with linear high order derivatives, the integration factor type time discretization can remove both the stability constrain and numerical errors from the high order derivatives.. Traditional integration factor methods have a disadvantage that large error coefficients are produced when the linear term has a large norm [8] . Recently Krogstad developed a method which can improve the accuracy of the traditional integration factor methods significantly [38] . Another class of ''integration factor'' type methods, the exponential time differencing (ETD) methods [5, 6, 22, 35] , can also obtain a better accuracy than the traditional integration factor methods. For ETD methods, extra treatments are needed for consistent order of accuracy [35, 23] .. The explicit integration factor methods use explicit linear multi-step methods or explicit Runge-Kutta methods to treat the nonlinear terms in the system (e.g. the explicit ETD-RK schemes [22] ), which are very efficient for systems with stiff linear part but nonstiff or mildly stiff nonlinear part. In [32] , explicit exponential Runge-Kutta methods for the time integration of semilinear parabolic problems were analyzed. For systems with both stiff linear and nonlinear terms, an implicit treatment of nonlinear terms is desirable. In [48] , we developed a class of efficient implicit integration factor (IIF) methods for solving systems with both stiff linear and nonlinear terms. A novel property of the methods is that the implicit terms are free of the exponential operation of the linear terms. Hence when the methods are applied to PDEs with stiff nonlinear reactions (e.g. the reaction-diffusion systems arising from mathematical models in computational developmental biology), the exact evaluation of the linear part is decoupled from the implicit treatment of the nonlinear reaction terms. As a result, the size of the nonlinear system arising from the implicit treatment is independent of the number of spatial grid points; it only depends on the number of the original PDEs. This distinguishes our IIF methods [48] from implicit ETD methods in [6] . Another efficient approach to decouple the stiff nonlinear terms from the linear terms is to use operator splitting integration factor methods (e.g. [44] ). We would like to point out that our approach is different from the operator splitting methods, hence is free of operator splitting errors.. The tremendous difficulty in implementing integration factor type method for high dimensional problems is how to efficiently evaluate the product of the matrix exponential and a vector. The differential matrix from the high dimensional spatial discretization is usually very large and sparse, but its exponential matrix will be dense. CPU cost and storage of such exponential matrix are prohibitive for high dimensional problems, although it can be handled well for 1D problems [48] . On rectangular meshes, the compact integration factor methods [49] can be used to deal with this issue. By introducing a compact representation for the matrix approximating the differential operator, the compact IIF methods apply matrix exponential operations sequentially in every spatial direction. As the results, exponential matrices which are calculated and stored have small sizes, as those in the 1D problem. For example for a 3D problem, if we have N grid points in every direction of the x, y and z directions, then we do not need to work on the full N 3 Â N 3 matrix and its exponential as in the original non-compact IIF methods [48] , but just need to consider several N Â N matrices and their exponentials. The storage and CPU time required for compact IIF schemes are smaller by orders of magnitude than the non-compact ones. The operation count of compact integration factor schemes is O(N 4 ) vs. O(N 6 ) for non-compact ones. See more details in [49] . But how to apply this approach to spatial discretization on high dimensional unstructured meshes for dealing with complex domain geometry is still unclear. In this paper, we address this problem by using the Krylov subspace approximations to the matrix exponential operator and develop the Krylov implicit integration factor (Krylov IIF) methods for spatial discretization on triangular meshes. The Krylov subspace methods were used and analyzed by Gallopoulos and Saad [26] , Saad [52] for the approximation of a product of a exponential matrix of a large sparse differential matrix and a given vector, in the finite difference discretization of a time-dependent diffusion equation. Since in many applications including the integration factor methods, one does not need the full exponential matrix, but only the matrix-vector product. See the review paper [46] . As discovered in [31] , the convergence to e ADt v is substantially faster than that of corresponding Krylov methods for the solution of linear system (I À DtA)x = v, which arises in the implicit treatment of diffusion or other high order derivative terms, at least unless a good preconditioner is available.. For the spatial directions, discontinuous Galerkin (DG) finite element methods are a class of popular high order accuracy spatial discretization methods for numerically solving various partial differential equations (PDEs) arising from computational fluid dynamics and other computational physics problems. DG methods confer several advantages that make them attractive for applications. These include common advantages shared by all finite element methods such as their ability for easy handling of complicated geometry and boundary conditions. Since DG methods use completely discontinuous piecewise polynomial space for the numerical solution and the test functions, this property makes DG methods have lots of flexibility which is not shared by continuous Galerkin finite element methods, such as their flexibility for easy h-p adaptivity including changes of approximation orders between neighboring elements and allowing general meshes with hanging nodes, their compactness hence efficient parallel implementation [7] , and their easy coordination with finite volume techniques for computing problems with discontinuous or sharp gradient solutions. The first DG method was introduced by Reed and Hill [50] , in the framework of neutron transport. A major development of DG methods was carried out by Cockburn et al. in a series of papers [16, 17, 14, 18, 19] , in which they established a framework to easily solve nonlinear time dependent hyperbolic conservation laws. Good references for DG methods and their recent development can be found in the review papers [15, 13, 20] .. In recent years, DG methods have been generalized to solve time dependent PDEs containing higher spatial derivatives. This class of new methods are termed local discontinuous Galerkin (LDG) methods. See e.g. [4, 21, 43, [61] [62] [63] [64] [65] [66] 37] . In a recent paper [11] , Cheng and Shu developed a new DG method for solving time dependent PDEs with higher order spatial derivatives, based on [1, 27, 58] . The scheme is formulated by repeated integration by parts of the original equation and then replacing the interface values of the solution by carefully chosen numerical fluxes. When DG methods are applied to discretize the spatial variables for convection-diffusion problems or other PDEs which have high order derivatives, a large coupled stiff ordinary differential equations (ODEs) system is generated. An explicit time discretization for the resulting stiff ODE system will suffer from extremely small time step restriction for stability. In [60] , time discretization techniques including semi-implicit spectral deferred correction method, the additive Runge-Kutta method and the exponential time differencing (ETD) method for solving the stiff ODEs resulting from a LDG spatial discretization to PDEs with high order spatial derivatives on 1D spatial domain were compared and studied.. To test our new Krylov IIF schemes in this paper, we apply them to solve the stiff ODE system resulting from a DG spatial discretization for reaction-diffusion problems on 2D triangular meshes [69] . Due to the stiffness of the spatial operators, the implicit discretization was formulated for the P 1 case in [69] and an operator-splitting approach was used to enhance the computation efficiency. The DG spatial discretization in [69] is based on [11] , but the numerical fluxes are different from those in [11] . In this paper, we will formulate the implicit DG discretization for both the P 1 and P 2 cases, and apply the new Krylov IIF schemes for the time-marching. Numerical examples are shown to demonstrate the accuracy, efficiency and robustness of the method in resolving the stiffness of the DG spatial operator for reaction-diffusion PDEs which have higher than first order spatial derivatives. Application of the method to a mathematical model in spatial pattern formation during zebrafish embryo development shall be shown. The rest of the paper is organized as following. In Section 2, we derive and formulate the Krylov IIF methods. In Section 3, we describe in detail the P 1 and P 2 DG spatial discretization for reaction-diffusion equations on 2D triangular meshes; then apply the new Krylov IIF methods to the resulting stiff ODE systems. Numerical experiments are presented in Section 4. Discussions and conclusions are given in Section 5.

O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Transparent access to Grid resources for user software Grid computing promises access to large amounts of computing power, but so far adoption of Grid computing has been limited to highly specialized experts for three reasons. First, users are used to batch systems, and interfaces to Grid software are often complex and different to those in batch systems. Second, users are used to having transparent file access, which Grid software does not conveniently provide. Third, efforts to achieve wide-spread coordination of computers while solving the first two problems is hampered when clusters are on private networks. Here we bring together a variety of software that allows users to almost transparently use Grid resources as if they were local resources while providing transparent access to files, even when private networks intervene. As a motivating example, the BaBar Monte Carlo production system is deployed on a truly distributed environment, the European DataGrid, without any modification to the application itself. At 'GRID 2002', Gabrielle Allen et al. made the observation that there is an eminent shortage of 'real Grid users' [1] . They claimed that two main obstacles prevent applications from benefiting from Grid computing. First, the absence of a vision of how to implement this new technology and, second, a toolkit of higher-level Grid services, tailored for the application needs, is not available. They introduced the GridLab project aimed at delivering an API through which applications access and use distributed resources.. We fully acknowledge these two problems and the need for projects that enable straightforward development of new applications suitable for distributed systems. However, the idea that almost every 789 while many production systems expect users to have administrator privileges on all machines on a network.. A computational Grid is inherently an unfriendly environment with its own challenges. Significant problems arise when resources need to be discovered, acquired and managed across the boundaries of administrative domains. Furthermore, installing most software on a new cluster is a labor-intensive process that defies automation: executables, scripts and libraries must be unpacked and installed; environment variables and other settings must be configured; database structures must be initialized; dependent software must be discovered and installed. Some software expects a uniform user database across multiple machines; this is an impossibility on a computational Grid. The nature of a distributed environment ensures that network outages and performance variations are common events.. Users and applications should be shielded from these complications. The satisfaction of a user with Grid computing depends heavily on the amount of effort required to deploy an application on a distributed system. This effort is drastically reduced when users can submit their jobs through a wellknown batch interface, one that does not require extra knowledge to run an application on resources in different administrative domains. The assembly of such a system is presented in Section 2.1. The way this 'overlay batch system' deals with network complexity is entirely different from that of a standard batch system. In contrast to normal batch nodes, Grid resources can often not be accessed directly by the batch system. These connection issues are handled by a generic layer in between the batch system and its system calls as will be discussed in Section 2.2.. Another equally important factor in the user experience is the success rate of the remotely executed applications. In Section 2.3 the construction of a virtual environment is discussed that allows almost any application that runs correctly on a local machine to complete successfully on Grid resources as well. The batch system provides the user with a familiar interface to distributed resources. The complexities that arise from resource management in a system spanning multiple administrative domains and private networks can effectively be hidden by Condor-G, the gliding-in technique and GCB. The GCB server is the weakest point in the system described. It maintains the connections to all machines in the private networks, and represents both a single point of failure and a security concern. Developments are on their way to provide GCB with a strong security mechanism and an extended addressing scheme to avoid IP address collisions between multiple private domains. Optimal queuing times can be guaranteed to the users by submitting batch processes to all remote resources, annulling those which are not used.

O O O O O O O O B I O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


A new algorithm for elimination of common subexpressions Abstract-The problem of an efficient hardware implementation of multiplications with one or more constants is encountered in many different digital signal-processing areas, such as image processing or digital filter optimization. In a more general form, this is a problem of common subexpression elimination, and as such it also occurs in compiler optimization and many highlevel synthesis tasks. An efficient solution of this problem can yield significant improvements in important design parameters like implementation area or power consumption. In this paper, a new solution of the multiple constant multiplication problem based on the common subexpression elimination technique is presented. The performance of our method is demonstrated primarily on a finite-duration impulse response filter design. The idea is to implement a set of constant multiplications as a set of add-shift operations and to optimize these with respect to the common subexpressions afterwards. We show that the number of add/subtract operations can be reduced significantly this way. The applicability of the presented algorithm to the different highlevel synthesis tasks is also indicated. Benchmarks demonstrating the algorithm's efficiency are included as well. T HE advent of consumer applications demanding very high data throughputs like digital television requires high-speed components such as digital filters. Because of the speed, programmable solutions such as digital signalprocessing (DSP) cores cannot be considered a satisfying solution in dealing with these problems. Rather, an applicationspecific approach in hardware is necessary, thus efficient verylarge-scale integration (VLSI) synthesis methods are needed.. The core of many VLSI design tasks is the multiplication of a variable by a set of constants (digital filtering, image processing, linear transforms, etc.). The optimization of these multiplications can lead to important improvements in various design parameters like area or power consumption. In this paper, an algorithm for efficient solution of the multiple constant multiplication problem (MCM, as defined in [3] ) is presented. Common subexpression elimination (CSE) as a way to tackle the MCM problem was already proposed by various authors [3] - [5] , primarily as a possible method for the optimization of finite-duration impulse response (FIR) filter area through the reduction of the multiplier block logic. In [3] also, a number of other applications in which the MCM transformation can be successfully applied were proposed. In this work, we will introduce an algorithm able to solve the CSE problem in an efficient way. The idea of CSE can be demonstrated on a FIR filter design example shown in Fig. 1 . The optimization procedure targets the minimization of the multiplier block area [ Fig. 1(a) ]. After expressing the coefficients in a canonical signed digit (CSD) format [1] , [2] , in order to reduce the total number of nonzero bits (thus also the additions/subtractions necessary), an addshift expansion is performed, as shown in Fig. 1(b) . The goal of CSE is to identify the bit patterns that are present in the coefficient set more than once. Since it is sufficient to implement the calculation of the multiple identical expressions only once, the resources necessary for these operations can be shared. The pattern in the example in Fig. 1 is present twice, so an optimized structure shown in Fig. 1(c) can be implemented instead of the original one. The second occurrence of the pattern is removed, and only the result is used for the further calculation. In general, the goal of CSE can be defined as follows.. 1) Identify multiple patterns in the coefficient set.. 2) Remove these patterns and calculate them only once. The problem to solve is how to identify the "proper" patterns for elimination so the optimization impact can be maximal. Our algorithm is based on a combination of an exhaustive search technique with a steepest descent (or greedy) approach in order to select the "proper" patterns for elimination. Thanks to an efficient implementation of the algorithm combined with 0278-0070/99$10.00 © 1999 IEEE some simplification techniques to speed up the processing of large tasks, very satisfactory runtimes are also achieved. The rest of this paper is structured as follows. In Section II, we discuss the related work. In the next section, we give a formal description of the problem and indicate our goal. Also, some considerations concerning the problem complexity are included. In Section IV, an in-depth discussion of our algorithm is given. In Section V, we indicate an implementation strategy of the algorithm for different design tasks (we concentrate on transposed-and direct-form FIR filters and matrix multiplication), followed by experimental results in Section VI. Section VII presents a comparison with the related work, and Section VIII states the conclusion. The idea of the consta+nt multiplications optimization (generally) or FIR filter area minimization (specifically) by common subexpressions sharing was already considered by several authors [3] - [7] . In this section, we will briefly introduce their approaches with an appropriate reference. In [3] , a bipartite matching algorithm was used to identify the common subexpressions for elimination, and there were shown also numerous examples different from FIR filter optimization on which it can be successfully applied. In [4] , an algorithm for the identification and elimination of only two-nonzerobit subexpressions was proposed, but the mechanics was extended to direct-form FIR filters as well (the remaining papers consider only transposed-form FIR filters). In [5] , an elimination of 2-bit subexpression was also proposed, but as an additional criterion in the subexpression identification process, an estimation of a latch-count improvement was used as well, which introduces the issues related with timing. Both [4] and [5] were specifically targeting the optimization of the FIR filters area. These three papers ( [3] - [5] ) used generally the same idea (common subexpression elimination) as a basic optimization strategy. References [7] and [6] applied a different approach. In these works, the whole multiplier block is synthesized using similar graph synthesis algorithms ( [6] can be considered an extension of [7] ). Despite this difference, the results obtained by these works are of course of interest for this paper in order to compare the effectiveness of both approaches.

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O B I I O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O B I I O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Automatic object segmentation from large scale 3D urban point clouds through manifold embedded mode seeking This paper presents a system that can automatically segment objects in large scale 3D point clouds obtained from urban ranging images. The system consists of three steps: The first one involves a ground detection process that can detect relatively complex terrain and separate it from other objects. The second step superpixelizes the remaining objects to speed up the segmentation process. In the final step, a manifold embedded mode seeking method is adopted to segment the point clouds. Even though the segmentation of urban objects is a challenging problem in terms of accuracy and problem scale, our system can efficiently generate very good segmentation results. The proposed manifold learning effectively improves the segmentation performance due to the fact that continuous artificial objects often have manifold-like structures. 3D models with geographical locations and semantical labels are the key for urban modeling that is widely used in a variety of applications, such as urban planning, simulation and visualization. Compared to modeling with traditional tedious and timeconsuming CAD tools to create and visualize 3D digital urban models, many methods have been developed in recent years to obtain * Area chair: Pal Halvorsen Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. 3D information automatically. With these methods, it becomes possible that large scale 3D data can be obtained and processed.. As a common method to obtain 3D information, systems equipped with LIDAR (light detection and ranging) sensors are widely used. The obtained data, also called ranging images, can be represented by 3D point clouds. However, a cloud as a whole reveals only limited structure of the urban scene and is far from being an informative visualization. To further utilize it, a necessary step is to label and categorize the points in the cloud object by object.. Object segmentation plays a crucial role in the point cloud processing routine. By segmentation, the points composing an object is extracted from the scene for recognition and a semantical tag is then attached to it. Despite the abundant previous works, only a few are related to large scale urban scene object localization [5] . Most methods are designed for a much confined scenario, such as focusing on a specific class of objects like roads [6] , vehicles [4, 10] , trees [15, 14, 9] , and buildings [7, 3, 11] . In these cases, either the scenario is relatively simple that contains only a few objects [8] , or the input objects have been segmented from the scene. The theme of these papers is mainly related to recognition and reconstruction of a specific class of objects where object recognition (or classification) techniques play a central role.. The urban object recognition system proposed in [5] uses normalized cuts [13] and min cut [1] to localize and partition point cloud objects. Other graph partitioning methods such as graph cut [2] are also useful tools for partitioning a set of points into subgroups. Our data, however, consist of much more complicated urban scenes, which render these methods fail in our experiments. The major challenge is basically twofold: First, point clouds typically consist of complicated, densely aligned objects with large size variation. Second, the inherent computation consuming nature of segmentation further leads to difficulties in dealing with large scale problems, reducing the practicality of a method. In this paper, we develop a system that can automatically segment objects in a 3D cloud of a large scale urban scene that contains billions of points. An example of the segmentation using our system is illustrated in Fig. 1(b) . It is worth mentioning that Golovinskiy et al. [5] and Lim et al. [8] also developed a system for similar purpose. The differences between our work and theirs include that 1) our system can extract complicated terrain maps, while [5] and [8] assume relatively simple, flat terrains. Without accurate terrain extraction, segmentation of some objects is easy to fail, 2) buildings that later can be used for further mesh reconstruction are included and segmented, 3) our data are highly noisy and heterogeneous due to the data acquisition and preprocessing method 1 , and 4) the objects in our data are highly occluded since the data are generated by going through the streets once. Fig. 2 shows how our method works. The three main steps, ground (terrain) detection, superpixelization, and object segmentation, are described as follows. In this paper, we have developed a system that can automatically segment objects in complicated urban scenes. The system can separate single, relatively small objects while preserving the connectivity of large, spanning ones. It provides good initial interpretations of the urban scenes, based on which 3D object reconstruction, visualization and recognition can be carried out. We conduct comprehensive experiments to test the proposed system on a data set containing 176 images obtained by scanning some streets of our city. To better illustrate its performance, the results are compared with results obtained by mean shift, a standard segmentation method widely adopted in the literature for point cloud segmentation [5, 12] . The mean shift algorithm is operated on the same object superpixels obtained through the first and second steps of our method. It also uses adaptive bandwidth in the our experiments, with the same parameter adaptivity settings to our method.

O O O O O O O O O O O B O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Rapid almost-complete broadcasting in faulty networks Abstract. This paper studies the problem of broadcasting in synchronous point-to-point networks, where one initiator owns a piece of information that has to be transmitted to all other vertices as fast as possible. The model of fractional dynamic faults with threshold is considered: in every step either a fixed number T , or a fraction α, of sent messages can be lost depending on which quantity is larger.As the main result we show that in complete graphs and hypercubes it is possible to inform all but a constant number of vertices, exhibiting only a logarithmic slowdown, i.e. in time O(D log n) where D is the diameter of the network and n is the number of vertices. Moreover, for complete graphs under some additional conditions (sense of direction, or α < 0.55) the remaining constant number of vertices can be informed in the same time, i.e. O(log n). Fault tolerance has been a crucial issue in the distributed computing since its beginnings [3, 5, 6, 10, 16, 25] . Because a typical distributed system is designed to contain a large number of individual components, attention must be paid to the fact that, even if the failure probability of a single component is negligible, the probability that some components fail may be high. There are numerous ways how to cope with failures, using either probabilistic or deterministic approaches. In the probabilistic setting, it is supposed that a failure probability of each component follows some probability distribution [4, 8, 11, 26, 27] . Failures of individual components are usually assumed to be independent random events. The goal is to design algorithms and protocols that perform well with high probability if the failures follow the conjectured distribution. The deterministic approach, which is pursued also in this paper, copes with failures in a different way. Instead of considering a failure probability distribution for each individual component, algorithms and protocols are designed to perform well in the worst case, under some a-priori constraints on the failure behavior. [1, 2, 7, [12] [13] [14] 19, 20, 22, 24, 28] . These constraints may take the form of considering only computations with a limited overall number of faults [1, 19] O(log n) Ω(log n) [22] , O(n 3 ) [12] Kn, chordal sense of direction O(log n) Ω(log n) [22] , O(log n) Kn, α < 0.55 O(log n) Ω(log n) [22] , O(log n) We address a natural relaxation of the broadcasting problem in which we allow a small constant number of vertices to stay uninformed in the end (a problem called almost complete broadcasting), and analyze the worst case time needed to solve the problem. Our main motivation to study almost complete broadcasts is the fact that in large faulty networks it is often vital to finish a communication task fast, even subject to some small error. In the probabilistic setting, this is modelled by allowing a failure probability that tends to zero with increasing network size: in the worst case the task is not successful but this worst case scenario has a small probability. Since in our deterministic setting we study the worst case, another model of allowed error must be chosen. If we look at the broadcast as an optimization problem where the task is to inform as many vertices as possible, it is natural to introduce a constant additive error by allowing a constant number of vertices to stay uninformed 4 .. For complete graphs and hypercubes, we show that the problem can be solved in time O(D log n), where D is the diameter of the graph and n is the number of its nodes.. Moreover, we show that if the complete graph is equipped with the chordal sense of direction, complete broadcasting can be performed in time O(log n). This is asymptotically optimal since the broadcasting time in the fractional model is a lower bound for the fractional model with threshold. Similarly we show that the broadcasting can be completed in time O(log n) for values α < 0.55. The overview of the results can be found in Table 1. We consider a synchronous, point-to-point distributed system with a coordinated start-up. The system consists of a number of nodes and a number of communication links connecting some pairs of nodes. The system is modelled by an undirected graph, in which vertices correspond to nodes and edges correspond to communication links. In this respect, we shall use the terms "node" and "vertex" interchangeably. Sometimes we need to argue about outgoing and incoming links; in this cases we consider a directed graph obtained from the undirected one by replacing each edge by two opposite arcs.. At the beginning of the computation all nodes are active and start performing the given protocol. The computation consists of a number of steps: at the beginning of each step, messages sent during the previous step are delivered to their destinations, then each vertex performs some local computation, possibly sending some messages 5 , and the next step begins. The failure model we consider is the fractional dynamic faults with threshold from [12] , which can be described as a game between the algorithm and an adversary: in a time step t the algorithm sends m t messages and the adversary may destroy up to. of them, where c(G) is the edge connectivity of the graph and α is a known, fixed constant 0 < α < 1. There is no built-in mechanism of acknowledgements, so the sender node is not informed whether a particular message was delivered or destroyed.. We consider the problem of broadcasting, where an initiator has a piece of information to be transmitted to all remaining vertices. We call a broadcast complete if all vertices have the information after the termination of the algorithm. A broadcast is called almost-complete if there is a fixed constant c (independent on the network size) such that after the termination there are at most c uninformed vertices. Hence, to prove the existence of an almost-complete broadcasting algorithm for a family of graphs G, one has to prove that there exists a constant c such that for each G ∈ G the broadcasting algorithm informs all but c vertices of G.. In all presented algorithms only the informed vertices send messages. Arcs (i.e. directed edges) leading from an informed vertex can be classified as being either active, passive or hyperactive during the computation: Definition 1. Let e be an arc leading from an informed vertex. We call e active if it leads to an uninformed vertex. We call an arc e passive, if some message has been delivered via the opposite arc of e. Finally, we call an arc e hyperactive if it leads to an informed vertex, and is not passive.. If the arc e is passive, the source vertex of e is aware of the fact that the destination vertex of e has already been informed. The main idea of our algorithms is to perform appropriate number of simple rounds defined as follows: Definition 2. A simple round consists of two time steps. In the first step, every informed vertex sends a message along each of its incident arcs, excluding the passive ones. 6 In the second step, all vertices that have received a message send an acknowledgement (and mark the arc as passive). Vertices that receive acknowledgement mark the corresponding arc as passive.. For the remainder of this paper, let 0 < α < 1 be a known fixed constant, and let us denote. The rest of the paper is organized as follows. In the next two sections we present algorithms for the almost-complete broadcasting on complete graphs and hypercubes, respectively, that run in time O(D log n). Then we show how to obtain broadcast in complete graphs equipped with chordal sense of direction, and for unoriented complete graphs for α < 0.55, having the same time complexity.. Due to space restrictions some technical parts have been omitted from this paper, and can be found in the technical report [23] .

O O B O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O