text:
- Biomedical Research (2015) Volume 26, Issue 2
Comparative analysis of optical coherence tomography retinal images using multidimensional and cluster methods.
Mohandass G1, Ananda Natarajan R2 & Hari Krishnan G1
1Research Scholar, Faculty of Electronics Engineering, Sathyabama University, Chennai, India.
2Department of Electronic and Instrumentation Engineering, Pondicherry Engineering College, Pondicherry, India.
Corresponding Author:
G. Hari Krishnan
Department of Biomedical Engineering
Accepted Date: January 07 2015
Optical coherence tomography (OCT) has many uses in medicine and engineering biology. It is a non-invasive technique for looking at the layered structures of tissues, such as skin, retina, teeth, and heart. Scanning of the retinal image reveals defects in the underlying layers. OCT performs in situ high resolution cross sectional imaging on a micron scale in real time. An application of OCT is in the imaging of diseases such as central serous retinopathy (CSR), which is the result of fluid accumulation under the macula. In the acquired OCT image, an inherent characteristic of coherent imaging is the presence of speckle noise. Reduction of speckle noise is one of the most important considerations for increasing the quality of coherent images. To enhance the quality, different filtering techniques are applied to analyze spectral noise in a CSR-OCT image. To analyze the effectiveness of the applied filtering techniques, various statistical parameters are applied and studied, such as the mean square error, peak signal to noise ratio, normalized crosscorrelation, and normalized absolute error. In this study, the resultant statistical information from the applied statistical parameters is subjected to multidimensional analysis to determine the best filtering technique to reduce speckle noise in CSR-OCT images.
Image analysis; Noise in imaging systems; Image detection systems; Transforms; Computational imaging; Optical coherence tomography; Ophthalmology; Coherence and statistical optics
Optical coherence tomography (OCT) has recently become a significant primary method for non-invasive mapping in the ocular pathologic diagnosis process of human retinal diseases. The structure of the retina is represented as a pseudo image in each section of mapping. In this study, the retinal disease central serous retinopathy (CSR) is used as an example for analysis (Figure 1). In this disease, fluid accumulates in the retina layer between the choroid and photoreceptor, and symptoms generally include blurred, distorted vision or micropsia [1]. The evolved OCT image is of a nondeterministic kind. In an OCT image, an irresolvable random tissue inhomogeneity of the retina layers might probabilistically lie across pixels (i.e., show speckle) because of the complexities of constructive and destructive interference in OCT B-scan images.
Figure 1: Optical Coherent Tomography Image of Central Serous Retinopathy Diseases.
Coherent pulses always travel in a straight line, to and fro (backscattered echo waves), and generate a new echo at twice the depth in biological tissue as of experimental procedure in Michelson interferometer for acquiring OCT images. Speckle noise is not inherent in an image but rather the effect of diffuse and multiple patterns of scattering caused by the inherent variation of sample properties [2].
The primary challenge in the image processing community is the study and performance of better image restoration in the presence of noise that accommodates the advancing technology of image sensors, chips, and modern capture devices. Camera manufactures, e.g., depend on effective denoising algorithms to reduce the noise artifacts in images. An effective state-of-the-art denoising algorithm must address the questions of whether the performance limit of the algorithm has been attained and that the results of the process are comparable and repeatable.
There are two main sources of statistical uncertainty (noise) in OCT data. (i) Inhomogeneous tissue layers cause random variations in refraction, resulting in unequal distribution of intensity in the image (ii) The structure of different retina cell layers result in random differences in reflectance. This spatial random variation results in nonexponential formation of OCT images. Before engaging in a statistical analysis of image denoising, the image formation model is given below:
yi = zi + μi (1)
where zi is the actual pixel intensity (the recovery of which is the goal) at location xi (indexed by i) and yi is the observed pixel intensity. The corrupting noise is given by μi in Eq. (1), which is independently distributed [3].
In this study, we analyze the following filters applied to OCT images: trimmed average filter, max filter, min filter, median filter, inverse filter, adaptive filter, Wiener filter, average filter, Lee filter, Kuan filter, wavelet denoising, statistical filter, two-dimensional (2D) finite impulse response (FIR) filter, and entropy filter. Statistical image processing is the most significant and comprehensive methods of image quality measurement. Statistical analysis is a very sensitive measure of various kinds of distortions, data hiding, and coding artifacts.
Our aim is to study the fundamental boundary frame on the basis of the performance of denoising algorithms through the comparative process of analysis and categorize similar kinds of state-of-the-art algorithms. However, the bounds of our study are developed in a much more general setting, and, to the best of our knowledge, no comparable study currently exists for the problem of denoising [4,5].
The measurements performed include the statistical parameters reflecting image quality: mean square error (MSE), peak signal to noise ratio (PSNR), and normalized cross-correlation (NCC) and normalized absolute error (NAE). Multidimensional scaling (MDS) is a primary utility for evaluating similarities and dissimilarities between various measurements (Euclidean distance model) of the results of filter algorithms applied to CSR-OCT images. The MDS model is nonlinear, and this exploratory data analysis technique relies on a spatial mapping of relationships between objects in multiple dimensions. In the Euclidean distance model, data representing similarity or dissimilarity are grouped using the highest common factor [6].
Classification or categorization by cluster analysis is performed by separating data into relatively homogeneous groups. Within the major subdivisions of clusters, evaluation is performed using the hierarchical cluster analysis and k-means clustering method; hierarchical clustering is a widely used approach. Conceptually, grouping is accomplished by building binary trees based on the similarity of the data. The hierarchical cluster analysis is conducted by agglomerative strategies (i.e., "bottom up" approach). K-means clustering is an effective tool for fixing the number of groups for data clustering, and it is a relatively simple and efficient clustering method that employs nonhierarchical procedures and unsupervised learning algorithms. Hence, in this study, we have chosen the kmeans clustering method [7].
Computational Methods and Procedures
We applied different filter techniques for denoising a CSR-OCT image for comparison and evaluation. The filter techniques minimize, reduce, or suppress the affect or disturbance due to the omnipresence of noise within images. The original image is first converted to a gray scale image and then subjected to a filter analysis [8].
Filter Techniques
In this study, we applied the following standard filter techniques for the purpose of comparison and evaluation: trimmed average filter, max filter, min filter, median filter, inverse filter, adaptive filter, Weiner filter, average filter, Lee filter, Kuan filter, wavelet filter, statistical filter, 2D FIR filter, and entropy filter [9-13]. These filters are chosen based on their results produced in other biomedical images. They represent the sample of filters considered for this study, although many more filters have been proven to perform better. However, this sample has been chosen to demonstrate the novel method of evaluating the characteristics of filters using clustering techniques.
Statistical Image Analysis
We use an assortment of statistical techniques to comprehensively categorize image quality measures that have been computed for grouping and classifying of similar filter sets [14,15].
Mean Square Error
MSE is the best statistical mathematical parameter chosen to quantify errors due to image noise contamination. The analysis is conducted by subtracting test images from a reference image as follows:
where, x(j,k) and x(j,k) are the reference and test images, respectively and M and N are the number of rows and columns, respectively, in the input images.
Peak Signal to Noise Ratio
PSNR is determined on a logarithmic decibel scale and is inversely proportional the MSE, as an alternative to the MSE. The PSNR gives the magnitude of the difference between two images, as expressed by Eq. (3). It is the ratio of the maximum possible intensity of an image to the intensity of the corrupting noise that affects the information of the image. Therefore, higher the PSNR value, closer a test image is to the original image.
Normalization Cross-Correlation
Patterns between two images can also be template matched in terms of a correlation function. A measure of the NCC yields similarity between two images. A large NCC value indicates a poor quality image. This computation is given by Eq. 4.
Normalized Absolute Error
Normalization is a process of magnitude measurement whereby the statistical error in repeated data is eliminated. A large NAE value indicates a poor quality image. The NAE computation is given by Eq. (5).
The filter output image is taken as an input of the "distorted image" and another input is taken as the "original image." The two images are compared by cross validation using the parameters MSE, PSNE, NCC, and NAE for quality analysis of the filtered image relative to each method. Methods such as MDS can be employed for cross validating one filter technique with the others.
MDS is a cluster structure analysis approach that can be employed even for nonlinear data that scales measurements of similarities/dissimilarities in terms of distance. Cluster analysis is further developed by the Euclidean distance model, hierarchical cluster analysis, and k-means clustering.
In this study, clustering and classification are both fundamental objectives for identifying the similarities/ dissimilarities of filters via the acquired statistical data. Clustering is used for classification, as well as for a supervised learning method [16,17].
Euclidean Distance Model
The distance between two points on the x and y plane can be found using the distance formula and Pythagorean theorem [12]. The distance between points (x1, y1) and (x2, y2) is given by Eq. 6.
Using MDS data, the Euclidean distance model provides a measure of the similarity and dissimilarly between filtering techniques
Hierarchical Cluster Analysis
This clustering procedure operates by exploring the specific nature of the filtered images and arranges groups based on the similarities of the methods [12]. Here, the agglomerative approach (i.e., association of n clusters to obtain 1 cluster) is applied for grouping data. Dendrograms represent the nested level of similar groupings of filter techniques. Here, Ward's cluster method is implemented. Ward's method generates clusters in accordance with the total sum of squared deviations from the mean of a cluster.
K-means Clustering
K-means clustering is a nonhierarchical, gradient descent procedure [18]. The hierarchical cluster analysis is predefined work for k-means clustering because the hierarchical cluster procedure determines the numbers of clusters to be considered in the k-means clustering approach. Kmeans clustering is the most widely used method of clustering. In addition to using the hierarchical cluster procedure, a very simple method of finding the number of clusters to be considered by the k-means cluster approach is through the "rule of thumb" described by Eq. (7).
The variable, n, above represents the number of filtering methods employed. As an example, for n = 8, K = 2. The K value is fixed and begins with the center as the initial cluster. Based on the threshold values set, the nearest cluster is formed by the distance from the center of the initial clusters and the mean values of methods in each cluster, i.e., cluster centers are calculated. The k-means algorithm is chosen based on clustering methods of nonlinear complexity, ease of interpretation, simplicity of implementation, speed of convergence, adaptability to sparse data, and sensitivity to noisy and outlying data.
Results and analysis
The results of application of various filters to the image in Figure 1 are shown in the Figure 2, consisting of gray scale image (A), trimmed filter (B), max filter (C), min filter (D), median filter (E), inverse filter (F), adaptive filter (G), Wiener filter (H), average filter (I), Lee filter (J), Kuan filter (K), wavelet Filter (L), 2D FIR filter (M), statistical filter (N), and entropy filter (O). In what follows, the computational results of the Euclidean distance, hierarchical clustering, and kmeans clustering are performed using the IBM statistical package for social sciences software.
Figure 2: Output images of filtering techniques applied to the CSR-OCT image in Fig. 1. A: grey scale image, B: trimmed average filters, C: max filter, D: min filter, E: median filter, F: inverse filter, G: adaptive filter, H: Wiener filter, I: average filter, J: Lee filter, K: Kuan filter, L: wavelet denoising filter, M: 2D-FIR filter, N: statistical filter and O: entropy filter.
The Euclidean distance method groups the similarity/ dissimilarity of the filters on the basis of the MDS data. Dimensions 1 and 2 represent the multidimensional values of the MDS, where equal diagonal values corresponding to the x and y-axis, respectively. As shown in Figures 3–6 the Euclidean distance plots are divided according to quadrants, where the upper right corner is the first quadrant, the upper left corner is the second quadrant, the bottom left corner is the third quadrant, and the bottom right corner is the fourth quadrant.
Figure 3: Mean square error Euclidean distance model.
Figure 4: Peak signal to noise ratio Euclidean distance model.
Figure 5: Normalized cross-correlation Euclidean distance model.
Figure 6: Normalized absolute error Euclidean distance model.
Similar filters grouped according to the MSE, wavelet, Weiner, average, median, max, and min filters and Lee as shown in figure 3. According to the PSNR, 2D FIR, wavelet, and adaptive filters similar groups are formed in the first quadrant as shown in figure 4. The statistical and Weiner filters form another similar group. Another group of similar filters is composed of Kuan, entropy, and inverse filters. The remaining filters are scattered.
As shown in Figure 5, the groupings according to the NCC quadrant by quadrant in the first quadrant: min, max, median, trimmed, and statistical filters; the second quadrant: entropy, Kuan, Lee, and 2D FIR filters; the third quadrant: inverse and adaptive filters; the fourth quadrant: wavelet, Wiener, and average filters. As shown in Figure 6, the groupings according to the NAE quadrant by quadrant in the first quadrant: Wiener, statistical, max, and trimmed filters; the second quadrant: median, Kuan, adaptive, and average filters; the third quadrant: wavelet, 2D FIR, and inverse filters; the fourth quadrant: Lee, min, and entropy filters.
As shown in Figure 3, groupings according to the MSE quadrant by quadrant in the first quadrant: adaptive, Kuan, and entropy filters; the second quadrant: median, max, and min filters; the third quadrant: wavelet, Wiener, Lee, average, statistical, and 2D FIR filters; the fourth quadrant: inverse and trimmed filters. As shown in Figure 4, groupings according to the PSNR quadrant by quadrant in the first quadrant: Wiener, statistical, 2D FIR, wavelet, and entropy filters; the second quadrant: trimmed, Kuan, inverse, and adaptive filters; the third quadrant: min, max, median, and average filters; the fourth quadrant: only Lee filter.
As shown in Figure 5, similar filters grouped according to the NCC are the median, trimmed, max, and min filters followed by the statistical filter in the first quadrant. Another group consists of the Kuan, Lee, and 2D FIR filters. The Weiner, wavelet, and average filters form another group. The remaining filters are dissimilar. As shown in Figure 6, similar filters grouped according to the NAE are the adaptive, Kuan, and median filters. Apart from these groups of filters, all others are scattered and dissimilar [19].
From the Euclidean model, the common filters based on all statistical parameters, MSE, PSNR, NCC, and NAE are as follows. In the first quadrant are the statistical, Wiener, and entropy filters. The statistical filter is found in this quadrant for most of the parameters. The second quadrant filters are Kuan, median, and adaptive. In this quadrant, the Kuan filter is the most common filter. The third quadrant filters are wavelet, inverse, 2D FIR, and average. In the fourth quadrant, the Lee filter is found. In the overall evaluation and analysis, the maximum clustering from the Euclidean distance model in the first quadrant is the statistical filter and that of the second quadrant is the Kuan filter. The third and fourth quadrants do not exhibit maximum repeatability like the first and second quadrants, so these quadrants were disregarded The sample of the 19en image (CSE1-19) taken from the same instrument (Ophthalmology, Inc.) is used for analysis. Although the cross sectional area of interest differs for each image, the data resemble the same. The examined image is computed on a constant dimension [20,21].
The graphical output of comparing the (CSE1-19) image using statistical parameters MSE, PSNR, NCC, and NAE resembles the same values, as shown in the Figures 7–10.
Figure 7: Comparing values of the central serous retinopathy image (CSE1-19) by the mean square error.
Figure 8: Comparing values of the central serous retinopathy image (CSE1-19) by the peak signal to noise ratio.
Figure 9: Comparing values of the central serous retinopathy image (CSE1-19) by the normalized cross-correlation.
Figure 10: Comparing values of the central serous retinopathy image (CSE1-19) by the normalized absolute error.
Based on subtrees, the results of the computed tree clustering methods are identified. The analysis of the hierarchical clustering statistical parameter is explained below. Using the MSE, as shown in Figure 11, similar cluster filter techniques based on the hierarchical clustering dendrogram are average, statistical, Weiner, Lee, 2D FIR, and wavelet filters. The second cluster consists of min and median filters. The third cluster is formed from in verse and Kuan filters. The fourth cluster is adaptive and entropy filters. The fifth cluster contains trimmed and max filters. Using the PSNR, most of the filter techniques are similar, as shown in Figure 12. The first cluster contains medium, Lee, Weiner, min, Kuan, average, statistical, max, wavelet, and 2D FIR filters. The second cluster consists of adaptive, entropy, and inverse filters. The third cluster is the trimmed filter. Using the NCC, all the filters are similar except for the adaptive filter, as shown in Figure 13.
Figure 11: Hierarchical clustering of data using the mean square error.
Figure 12: Hierarchical clustering of data using the peak signal to noise ratio.
Figure 13: Hierarchical clustering of data using the normalized cross-correlation.
Using the NAE, three clusters are formed, as shown in Figure 14. One set consists of trimmed, statistical, 2D FIR, Lee, and Weiner filters. The second set is composed of median, wavelet, Kuan, and average filters. The third cluster is formed of inverse, adaptive, max, and entropy filters. Dissimilarity is identified with respect to all other filter techniques by this statistical parameter.
Figure 14: Hierarchical clustering of data using the normalized absolute error.
In the general analysis of the hierarchical cluster approach, the most common among all cluster groups are the statistical and Wiener filters in statistical parameters.
K-means clustering is conducted according to the "rule of thumb" by which, n = 15, K = 3, and the clustering graphs for the various statistical parameters are shown in Figures 15–18. In the analysis the k-means output, the MSE, PSNR, NCC, and NAE are mostly linear and no drastic change in output is visualized.
Figure 15: K-mean values of the mean square error for K = 3.
Figure 16: K-mean values of the peak signal to noise ratio for K = 3.
Figure 17: K-mean values of the normalized cross-correlation for K = 3.
Figure 18: K-mean values of the normalized absolute error for K = 3.
K-means clustering was performed using K = 2 and 3 for comparison. Using the MSE, the clustered filters for K = 3 are adaptive, inverse, and entropy. Similarly, for K = 2, the clustered filters are Weiner, average, Kuan, wavelet, statistical, and 2D FIR. Using the PSNR, the cluster for K = 3 consists of max, min, median, Weiner, average, Lee, Kuan, wavelet, statistical, and 2D FIR filters. Similarly, the K = 2 cluster contains inverse and entropy filters. Using the NCC, for K = 3, the cluster contains the 2D FIR, statistical, wavelet, Kuan, and Lee filters. Similarly, the K = 2 cluster consists of trimmed, max, min, median, inverse, Weiner, average, and entropy filters. Using the NAE, for K = 3, the cluster contains only the inverse filter. Similarly, for K = 2, the cluster contains min, Weiner, average, and 2D FIR filters.
From analysis of all outputs of the Euclidean, hierarchical, and k-means clustering approaches, the most common filters based on cluster repeatability are expressed in two stages. In the first stage, the most preferable and considered to be most suitable according this study is the statistical filter. In the second stage are the Weiner and Kuan filters. The first stage filter is more dominant in OCT images.
So far, all evaluation has been conducted by the MDS. In Figure 19, the individual formulae for PSNR, MSE, NCC, and NAE are applied to the CSR-OCT filters and the values are attained to form the graph. This output reveals that the PSNR parameter is very important for two reasons. First, the increase in the value is indicative of the quality of the image, and the second regards the clustering of the filters in the grouping range. Thus, this make to analysis the PSNR value with respect to the Euclidean distance model, hierarchical clustering, and k-means clustering in the multidimensional values. This reveals that the statistical filter is uniquely common among all the clustering techniques considered in this analysis. This is the primary result that we determined by the clustering techniques considered. There are other methods to identify effective filtering techniques. However, through the MDS methods employed for combinational evaluation of statistical techniques such as PSNR, MSE, NCC, and NAE with the filters considered, we determined by the number of repeated clusters in the combined statistical techniques that the statistical filter is the most effective for CSR-OCT images convoluted with speckle noise. For other filters, the results may be different. Here, basic and fundamental filters have been chosen. These basic and fundamental filters were chosen because they derive from decades of research and lead the path toward more effective filters. This novel clustering method of evaluation provides nonredundant data by which systematic identification of similar sets of filters and commonly repeated filters results in better identification of the most effective filter for the application considered.
Figure 19: Statistical techniques applied in CSR filtered image.
In this study, various denoising techniques are analyzed by statistical image processing methods. The results of filtering techniques are analyzed for evaluation and categorization into similar groups using the standard statistical parameters MSE, PSNR, NCC, and NAE. Cluster analysis data derived from the Euclidean distance model, hierarchical clustering, and k-means clustering are determined via statistical parameters. Classification of similar filters indicates that the most similar filter techniques are the statistical, Weiner, and Lee filters followed by the average and wavelet filters. Apart from these, dissimilar categorization is found with respect to filtering techniques and statistical parameters. In general, the statistical filter is more effective in CSR-OCT images. Future work will be pursuing analysis by neural fuzzy techniques.
We acknowledge Mr. C. Raja, for providing OCT images from Aravind Eye Hospital, Pondicherry. Special thanks to Mr. C. Sathish Gunasekaran and the Director of RIOGOH, Egmore, in support of OCT images. Special thanks to Mr. T. Vishnu and Dr. R. Ravanan, Presidency College, Chennai for their helpful contributions during the development of this study.
MD Abràmoff, MK Garvin, M Sonka, Retinal imaging and image analysis. IEEE Reviews in Biomedical Engineering 3, 169?208 (2009).
A Wong, A Mishra, K Bizheva, DA Clausi, General Bayesian estimation for speckle noise reduction in op tical coherence tomography retinal imagery. Opt. Express 18, 8338?8352 (2010).
P Chatterjee, P Milanfar, Is denoising dead?? IEEE Transactions on Image Processing 19(4), 895?911 (2010).
P Chatterjee, P Milanfar, Patch-based near-optimal image denoising. IEEE Transactions on Image Processing 21(4), 1635?1649 (2012).
J Xu, H Ou, C Sun, PC Chui, X Victor, D Yang, EY Lam, KKY Wonga, Wavelet domain compounding for speckle reduction in optical coherence tomography. Journal of Biomedical Optics 18(9), 096002?7 (2013).
NM Grzywacz, J de Juan, C Ferrone, D Giannini, D Huang, G Koch, V Russo, O Tan, C Bruni, Statistics of optical coherence tomography data from human Retina. IEEE Transactions on Medical Imaging 29(6), 1224?1237 (2010).
PG Firat, E Ozsoy, S Demirel, T Cumurcu, A Gunduz, Evaluation of peripapillary retinal nerve fiber layer, macula and ganglion cell thickness in amblyopia using spectral optical coherence tomography. Int J Ophthalmol. 6(1), 90?94 (2013).
K Dabov, A Foi, V Katkovnik, KO Egiazarian, Image denoising by sparse 3-D transform-domain collaborative filtering. IEEE Transactions Image Processing 16(8), 2080?2095 (2007).
A Markus, AB Mayer, M Wagner, J Hornegger, CY Mardin, and RP Tornow, Wavelet denoising of ultiframe optical coherence tomography data. Biomed. Opt. Express 3(3), 572?589 (2012).
TR Hillman, A Curatolo, BF Kennedy, DD Sampson, Detection of multiple scattering in optical coherence tomography by speckle correlation of angle dependent B-scans. Opt. Lett. 35(12), 1998?2000 (2010).
M Hughes, M Spring, A Podoleanu, Speckle noise reduction in optical coherence tomography of paint layers. Appl. Optics 49(1), 99?107 (2010).
H Wang, AM Rollins, Speckle reduction in optical coherence tomography using angular compounding by Bscan Doppler-shift encoding. J. Biomed. Opt. 14(3), 030512?3 (2009).
BF Kennedy, A Curatolo, TR Hillman, CM Saunders, DD Sampson, Speckle reduction in OCT images using tissue viscoelasticity. Journal of Biomedical Optics. 16(2), 020506?3 (2011).
U von Luxburg, Clustering stability: an overview. Foundations and Trends in Machine Learning 2(3), 235?274 (2010).
LW Ma, JS Zhang, J Xu, J Zhang, P Zhao, Evaluation of computerized image analysis system for quantification of posterior capsular opacification. Int J Ophthalmol. 2(1) (2009).
A Buja, DF Swayne, M Littman, N Dean, H Hofmann, Interactive data visualization with multidimensional scaling. Journal of Computational and Graphical Statistics 17(2), 444?472 (2008).
P Chatterjee, P Milanfar, Clustering-based denoising with locally learned dictionaries. IEEE Trans. Image Processing 18(7), 1438?1451 (2009).
Y Kikutani, A Okamoto, XH Han, X Ruan, Y Chen, Hierarchical classifier with multiple feature weighted fusion for scene recognition. 2nd International Conference on Software Engineering and Data Mining. 1, 648?651 (2010).
M Maier, M Hein, U von Luxburg, Optimal construction of k-nearest neighbor graphs for identifying noisy clusters. Theoretical Computer Science 410(19), 1749?1764 (2009).
L Zhang, D Zhang, X Mou, FSIM: a feature similarity index for image quality assessment. IEEE Transactions Image Processing 20(8), 2378?2386 (2011).
RJ Hemalatha, G Mohandass, G Hari Krishnan, G Uma Shankar, Tissue characterization in prostatic lesion using statistical feature analysis. CIIT International Journal of Digital Image Processing 4(10), 524?528 (2012).


text:
package com.ibatis.sqlmap.engine.config;

import com.ibatis.common.beans.*;
import com.ibatis.common.resources.*;
import com.ibatis.sqlmap.client.*;
import com.ibatis.sqlmap.engine.cache.*;
import com.ibatis.sqlmap.engine.impl.*;
import com.ibatis.sqlmap.engine.mapping.parameter.*;
import com.ibatis.sqlmap.engine.mapping.result.*;
import com.ibatis.sqlmap.engine.mapping.sql.*;
import com.ibatis.sqlmap.engine.mapping.sql.dynamic.*;
import com.ibatis.sqlmap.engine.mapping.sql.simple.*;
import com.ibatis.sqlmap.engine.mapping.sql.stat.*;
import com.ibatis.sqlmap.engine.mapping.statement.*;
import com.ibatis.sqlmap.engine.scope.*;
import com.ibatis.sqlmap.engine.type.*;

import java.sql.ResultSet;
import java.util.*;

public class MappedStatementConfig {
    private static my.Debug DEBUG = new my.Debug(my.Debug.SqlMapConfigParser);//我加上的
    private static final Probe PROBE = ProbeFactory.getProbe();
    private static final InlineParameterMapParser PARAM_PARSER = new InlineParameterMapParser();
    private ErrorContext errorContext;
    private SqlMapClientImpl client;
    private TypeHandlerFactory typeHandlerFactory;
    private MappedStatement mappedStatement;
    private MappedStatement rootStatement;

    //defaultStatementTimeout是指<settings>元素的defaultStatementTimeout属性值
    MappedStatementConfig(SqlMapConfiguration config, String id, MappedStatement statement, SqlSource processor,
            String parameterMapName, Class parameterClass, String resultMapName, String[] additionalResultMapNames,
            Class resultClass, Class[] additionalResultClasses, String cacheModelName, String resultSetType, Integer fetchSize,
            boolean allowRemapping, Integer timeout, Integer defaultStatementTimeout, String xmlResultName) {
        try {//我加上的
            DEBUG.P(this, "MappedStatementConfig(...)");
            DEBUG.P("id=" + id);

            this.errorContext = config.getErrorContext();
            this.client = config.getClient();
            SqlMapExecutorDelegate delegate = client.getDelegate();
            this.typeHandlerFactory = config.getTypeHandlerFactory();
            errorContext.setActivity("parsing a mapped statement");
            errorContext.setObjectId(id + " statement");
            errorContext.setMoreInfo("Check the result map name.");
            if (resultMapName != null) {
                statement.setResultMap(client.getDelegate().getResultMap(resultMapName));
                if (additionalResultMapNames != null) {
                    for (int i = 0; i < additionalResultMapNames.length; i++) {
                        statement.addResultMap(client.getDelegate().getResultMap(additionalResultMapNames[i]));
                    }
                }
            }
            errorContext.setMoreInfo("Check the parameter map name.");
            if (parameterMapName != null) {
                statement.setParameterMap(client.getDelegate().getParameterMap(parameterMapName));
            }
            statement.setId(id);
            statement.setResource(errorContext.getResource());
            if (resultSetType != null) {
                if ("FORWARD_ONLY".equals(resultSetType)) {
                    statement.setResultSetType(new Integer(ResultSet.TYPE_FORWARD_ONLY));
                } else if ("SCROLL_INSENSITIVE".equals(resultSetType)) {
                    statement.setResultSetType(new Integer(ResultSet.TYPE_SCROLL_INSENSITIVE));
                } else if ("SCROLL_SENSITIVE".equals(resultSetType)) {
                    statement.setResultSetType(new Integer(ResultSet.TYPE_SCROLL_SENSITIVE));
                }
            }
            if (fetchSize != null) {
                statement.setFetchSize(fetchSize);
            }

            // set parameter class either from attribute or from map (make sure to match)
            ParameterMap parameterMap = statement.getParameterMap();
            if (parameterMap == null) {
                statement.setParameterClass(parameterClass);
            } else {
                statement.setParameterClass(parameterMap.getParameterClass());
            }

            // process SQL statement, including inline parameter maps
            errorContext.setMoreInfo("Check the SQL statement.");
            Sql sql = processor.getSql();
            setSqlForStatement(statement, sql);

            // set up either null result map or automatic result mapping
            ResultMap resultMap = (ResultMap) statement.getResultMap();
            if (resultMap == null && resultClass == null) {
                statement.setResultMap(null);
            } else if (resultMap == null) {
                resultMap = buildAutoResultMap(allowRemapping, statement, resultClass, xmlResultName);
                statement.setResultMap(resultMap);
                if (additionalResultClasses != null) {
                    for (int i = 0; i < additionalResultClasses.length; i++) {
                        statement.addResultMap(buildAutoResultMap(allowRemapping, statement, additionalResultClasses[i],
                                xmlResultName));
                    }
                }

            }
            statement.setTimeout(defaultStatementTimeout);
            if (timeout != null) {
                try {
                    statement.setTimeout(timeout);
                } catch (NumberFormatException e) {
                    throw new SqlMapException("Specified timeout value for statement " + statement.getId()
                            + " is not a valid integer");
                }
            }
            errorContext.setMoreInfo(null);
            errorContext.setObjectId(null);
            statement.setSqlMapClient(client);
            if (cacheModelName != null && cacheModelName.length() > 0 && client.getDelegate().isCacheModelsEnabled()) {
                CacheModel cacheModel = client.getDelegate().getCacheModel(cacheModelName);
                mappedStatement = new CachingStatement(statement, cacheModel);
            } else {
                mappedStatement = statement;
            }
            rootStatement = statement;
            delegate.addMappedStatement(mappedStatement);

        } finally {//我加上的
            DEBUG.P(0, this, "MappedStatementConfig(...)");
        }
    }

    public void setSelectKeyStatement(SqlSource processor, String resultClassName, String keyPropName, boolean runAfterSQL,
            String type) {
        try {//我加上的
            DEBUG.P(this, "setSelectKeyStatement(...)");
            DEBUG.P("resultClassName=" + resultClassName);
            DEBUG.P("keyPropName=" + keyPropName);
            DEBUG.P("runAfterSQL=" + runAfterSQL);
            DEBUG.P("type=" + type);

            if (rootStatement instanceof InsertStatement) {
                InsertStatement insertStatement = ((InsertStatement) rootStatement);
                Class parameterClass = insertStatement.getParameterClass();
                errorContext.setActivity("parsing a select key");
                SelectKeyStatement selectKeyStatement = new SelectKeyStatement();
                resultClassName = typeHandlerFactory.resolveAlias(resultClassName);
                Class resultClass = null;

                DEBUG.P("parameterClass=" + parameterClass);
                DEBUG.P("resultClassName=" + resultClassName);

                // get parameter and result maps
                selectKeyStatement.setSqlMapClient(client);
                selectKeyStatement.setId(insertStatement.getId() + "-SelectKey");
                selectKeyStatement.setResource(errorContext.getResource());
                selectKeyStatement.setKeyProperty(keyPropName);
                selectKeyStatement.setRunAfterSQL(runAfterSQL);
                // process the type (pre or post) attribute
                if (type != null) {
                    selectKeyStatement.setRunAfterSQL("post".equals(type));
                }
                try {
                    if (resultClassName != null) {
                        errorContext.setMoreInfo("Check the select key result class.");
                        resultClass = Resources.classForName(resultClassName);
                    } else {
                        if (keyPropName != null && parameterClass != null) {
                            resultClass = PROBE.getPropertyTypeForSetter(parameterClass, selectKeyStatement.getKeyProperty());
                        }
                    }
                } catch (ClassNotFoundException e) {
                    throw new SqlMapException("Error.  Could not set result class.  Cause: " + e, e);
                }
                if (resultClass == null) {
                    resultClass = Object.class;
                }

                // process SQL statement, including inline parameter maps
                errorContext.setMoreInfo("Check the select key SQL statement.");
                Sql sql = processor.getSql();
                setSqlForStatement(selectKeyStatement, sql);
                ResultMap resultMap;
                resultMap = new AutoResultMap(client.getDelegate(), false);
                resultMap.setId(selectKeyStatement.getId() + "-AutoResultMap");
                resultMap.setResultClass(resultClass);
                resultMap.setResource(selectKeyStatement.getResource());
                selectKeyStatement.setResultMap(resultMap);
                errorContext.setMoreInfo(null);
                insertStatement.setSelectKeyStatement(selectKeyStatement);
            } else {
                throw new SqlMapException("You cant set a select key statement on statement named " + rootStatement.getId()
                        + " because it is not an InsertStatement.");
            }

        } finally {//我加上的
            DEBUG.P(0, this, "setSelectKeyStatement(...)");
        }
    }

    private void setSqlForStatement(MappedStatement statement, Sql sql) {
        try {//我加上的
            DEBUG.P(this, "setSqlForStatement(...)");
            DEBUG.P("(sql instanceof DynamicSql)=" + (sql instanceof DynamicSql));

            if (sql instanceof DynamicSql) {
                statement.setSql(sql);
            } else {
                applyInlineParameterMap(statement, sql.getSql(null, null));
            }

        } finally {//我加上的
            DEBUG.P(0, this, "setSqlForStatement(...)");
        }
    }

    private void applyInlineParameterMap(MappedStatement statement, String sqlStatement) {
        try {//我加上的
            DEBUG.P(this, "applyInlineParameterMap(...)");
            DEBUG.P("sqlStatement=" + sqlStatement);

            String newSql = sqlStatement;
            errorContext.setActivity("building an inline parameter map");
            ParameterMap parameterMap = statement.getParameterMap();
            errorContext.setMoreInfo("Check the inline parameters.");

            DEBUG.P("parameterMap=" + parameterMap);
            if (parameterMap == null) {
                ParameterMap map;
                map = new ParameterMap(client.getDelegate());
                map.setId(statement.getId() + "-InlineParameterMap");
                map.setParameterClass(statement.getParameterClass());
                map.setResource(statement.getResource());
                statement.setParameterMap(map);
                SqlText sqlText = PARAM_PARSER.parseInlineParameterMap(client.getDelegate().getTypeHandlerFactory(), newSql,
                        statement.getParameterClass());
                newSql = sqlText.getText();
                List mappingList = Arrays.asList(sqlText.getParameterMappings());
                map.setParameterMappingList(mappingList);

                DEBUG.P("newSql=" + newSql);
                DEBUG.P("mappingList=" + mappingList);
            }
            Sql sql;
            if (SimpleDynamicSql.isSimpleDynamicSql(newSql)) {
                //sql串中有"$"
                sql = new SimpleDynamicSql(client.getDelegate(), newSql);
            } else {
                sql = new StaticSql(newSql);
            }

            DEBUG.P("sql=" + sql);
            statement.setSql(sql);

        } finally {//我加上的
            DEBUG.P(0, this, "applyInlineParameterMap(...)");
        }

    }

    private ResultMap buildAutoResultMap(boolean allowRemapping, MappedStatement statement, Class firstResultClass,
            String xmlResultName) {
        try {//我加上的
            DEBUG.P(this, "buildAutoResultMap(...)");
            DEBUG.P("allowRemapping=" + allowRemapping);
            DEBUG.P("firstResultClass=" + firstResultClass);
            DEBUG.P("xmlResultName=" + xmlResultName);

            ResultMap resultMap;
            resultMap = new AutoResultMap(client.getDelegate(), allowRemapping);
            resultMap.setId(statement.getId() + "-AutoResultMap");
            resultMap.setResultClass(firstResultClass);
            resultMap.setXmlName(xmlResultName);
            resultMap.setResource(statement.getResource());
            return resultMap;

        } finally {//我加上的
            DEBUG.P(0, this, "buildAutoResultMap(...)");
        }
    }

    public MappedStatement getMappedStatement() {
        return mappedStatement;
    }
}

redpajama_set_name: RedPajamaGithub


I'm sitting on the couch in the rec room of my parents' house on Mercer Island. This was my childhood home from the age of 8 on up. And 23 years ago, when I was 16, on a Monday, on President's Day, the first day of mid-winter break, I remember being in this room.
In the earlier part of the day I was watching Pulp Fiction with two friends. And then, after taking them home, I found myself back in this room, back on the couch, in front of the TV, watching Melrose Place.
And then I went to bed. It must have been 9 or 10pm, which was pretty early to go to bed during a vacation, but I was sleepy, so I went to sleep.
Around midnight, I received a phone call on my parents' landline. I had a phone in my room, but the ringer was off. My mom knocked on my door, though. She said someone was calling from work.
There's more to this story, a lot more, and it's in a manuscript I mostly finished back in 2012. And some day I'll finish it, when I know what the point is of sharing it and how the story ends.
But for now I'll just say, for those of you who don't already know, that night I was in a nearly fatal, highly traumatic car accident.
You can read an old blog post about it here--a blog post that inspired me to convert that whole manuscript into the style of "epic poetry." No joke. I worked on that conversion in my friend's attic, where I was temporarily living, when I first moved down to Austin to work with Master Li on his books.
It's tempting to share some more of it here. But for now I feel it's best to just redirect you to my old blog.
And speaking of now, what more do I have to say about this day?
Anniversaries are stored in the cells, which can feel like a gift or like a curse. Or like both.
I've done a ton of healing--physically, emotionally, energetically, you name it--and the driver and I are on good terms. But every year, as February 19 and 20 approach, I feel it. I feel a combination of things, and it's shifted over the years to be mostly positive. I have more of a survival story than a victim story now. I feel grateful for the blessings in disguise and the gifts that have come from this experience. I see how the accident and its aftermath have shaped my life in mostly good ways.
But I'd be lying if I said it was all good. I even just recently found out about an impact of the accident I hadn't anticipated. And some day I probably will share more about that. But not today.
Today I just sit with it all and don't feel like saying much more. I sit with the blessings and gifts, as well as the harmful impact. I sit with the perfection of it all, even the parts that have been hard. I know it's all part of my path. And I'm grateful to have survived. I'm grateful for this life.


text:
Characterising activities of free-ranging Merino ewes before, during and after lambing from GNSS data
Dobos, R.C., Taylor, D.B., Trotter, M.G., McCorkell, B.E., Schneider, D.A., and Hinch, G.N. (2015) Characterising activities of free-ranging Merino ewes before, during and after lambing from GNSS data. Small Ruminant Research, 131. pp. 12-16.
DOI: 10.1016/j.smallrumres.2015.06.017
View at Publisher Website: http://dx.doi.org/10.1016/j.smallrumres....
Tracking the movement of grazing Merino ewes using Global Navigational Satellite Systems (GNSS) provided data which could be used to determine the behavioural characteristics exhibited during different physiological states and times-within-day. GNSS location and the resulting movement calculations from five foraging Merino ewes of known lambing date were partitioned into four different 24 h physiological states (PS): (1) seven days before lambing (L − 7), (2) day of lambing (L), (3) three days after lambing (L + 3) and (4) seven days after lambing (L + 7). Within each of these four PS the data were further partitioned into three time-within-day (TWD) intervals based on behavioural patterns: (1) 0500 to 1159 h morning foraging; (2) 1200 to 1859 h afternoon foraging and (3) 1900 to 0459 h night camping. Ewe locations were recorded at 10 min intervals over a 43 day period. Distances moved (m) and rates of travel (m/s) were analysed to characterise free-ranging ewe spatio-temporal activities within the four PS and three TWD periods. Physiological state and TWD had significant (P < 0.001) effects on mean distance moved by ewes but there was no two-way interaction (P > 0.05). Ewe rate of travel was significantly (P < 0.001) affected by PS and TWD and there was a significant (P < 0.01) two-way interaction. Ewes at L spent 13.2% less time foraging than ewes in other PS (mean 53.2%), while time spent in stationary behaviour accounted for 59.5% and ewes in other PS spent a mean of 45.2% of their time stationary. Distance moved and rate of travel during foraging were significantly (P < 0.001) affected by PS and TWD. GNSS collars were satisfactory to characterise behaviour of foraging Merino ewes at different PS and TWD. However, using ewe behaviour alone to identify when lambing occurs may not be a satisfactory husbandry option.
geospatial data, ewes, spatio-temporal, behaviour
University of New England (UNE), Australian Wool Education Trust Fund, Australian Wool Innovation, Australian Sheep Cooperative Research Centre
10 TECHNOLOGY > 1001 Agricultural Biotechnology > 100199 Agricultural Biotechnology not elsewhere classified @ 10%
07 AGRICULTURAL AND VETERINARY SCIENCES > 0702 Animal Production > 070203 Animal Management @ 50%
07 AGRICULTURAL AND VETERINARY SCIENCES > 0702 Animal Production > 070206 Animal Reproduction @ 40%
83 ANIMAL PRODUCTION AND ANIMAL PRIMARY PRODUCTS > 8303 Livestock Raising > 830311 Sheep - Wool @ 50%
83 ANIMAL PRODUCTION AND ANIMAL PRIMARY PRODUCTS > 8399 Other Animal Production and Animal Primary Products > 839901 Animal Welfare @ 50%

redpajama_set_name: RedPajamaCommonCrawl


Our firm aims to operating faithfully, serving to all of our consumers , and working in new technology and new machine continually for Roller Dry Granulator,Compactor Dry Granulator,Tablet Dry Granulator. Welcome you to join us alongside one another to produce your enterprise easier. We're generally your finest partner when you want to have your own enterprise.
We not only will try our best to offer excellent services to every customer, but also are ready to receive any suggestion offered by our customers for Roll Compactor Dry Granulator. The product will supply to all over the world, such as: Aruba,Belize,Chile. please feel free to send us your inquiry. We sincerely hope to establish win-win business relationships with you.


text:
<channel version="3.4.2">
  <id>ddd4fb6b-0232-4af2-b32d-9022674322a0</id>
  <nextMetaDataId>2</nextMetaDataId>
  <name>0001_logger</name>
  <description>Canal simple que recibe HL7 v2.x por MLLP en el puerto 6661 y lo guarda en un directorio.
Se hace un log en cada script, transformador y filtro para mostar el orden de ejecución de los mismos.
Los mensajes pueden ser enviados por HAPI Test Panel, no importa el tipo de mensaje.</description>
  <enabled>true</enabled>
  <lastModified>
    <time>1493613242424</time>
    <timezone>America/Montevideo</timezone>
  </lastModified>
  <revision>1</revision>
  <sourceConnector version="3.4.2">
    <metaDataId>0</metaDataId>
    <name>sourceConnector</name>
    <properties class="com.mirth.connect.connectors.tcp.TcpReceiverProperties" version="3.4.2">
      <pluginProperties/>
      <listenerConnectorProperties version="3.4.2">
        <host>0.0.0.0</host>
        <port>6661</port>
      </listenerConnectorProperties>
      <sourceConnectorProperties version="3.4.2">
        <responseVariable>ackresp</responseVariable>
        <respondAfterProcessing>true</respondAfterProcessing>
        <processBatch>false</processBatch>
        <firstResponse>true</firstResponse>
        <processingThreads>1</processingThreads>
        <resourceIds class="linked-hash-map">
          <entry>
            <string>Default Resource</string>
            <string>[Default Resource]</string>
          </entry>
        </resourceIds>
        <queueBufferSize>1000</queueBufferSize>
      </sourceConnectorProperties>
      <transmissionModeProperties class="com.mirth.connect.plugins.mllpmode.MLLPModeProperties">
        <pluginPointName>MLLP</pluginPointName>
        <startOfMessageBytes>0B</startOfMessageBytes>
        <endOfMessageBytes>1C0D</endOfMessageBytes>
        <useMLLPv2>false</useMLLPv2>
        <ackBytes>06</ackBytes>
        <nackBytes>15</nackBytes>
        <maxRetries>2</maxRetries>
      </transmissionModeProperties>
      <serverMode>true</serverMode>
      <remoteAddress></remoteAddress>
      <remotePort></remotePort>
      <overrideLocalBinding>false</overrideLocalBinding>
      <reconnectInterval>5000</reconnectInterval>
      <receiveTimeout>0</receiveTimeout>
      <bufferSize>65536</bufferSize>
      <maxConnections>10</maxConnections>
      <keepConnectionOpen>true</keepConnectionOpen>
      <dataTypeBinary>false</dataTypeBinary>
      <charsetEncoding>DEFAULT_ENCODING</charsetEncoding>
      <respondOnNewConnection>0</respondOnNewConnection>
      <responseAddress></responseAddress>
      <responsePort></responsePort>
    </properties>
    <transformer version="3.4.2">
      <steps>
        <step>
          <sequenceNumber>0</sequenceNumber>
          <name>Log</name>
          <script>logger.info("Source Transformer Step 1");</script>
          <type>JavaScript</type>
          <data>
            <entry>
              <string>Script</string>
              <string>logger.info("Source Transformer Step 1");</string>
            </entry>
          </data>
        </step>
        <step>
          <sequenceNumber>1</sequenceNumber>
          <name>Log 2</name>
          <script>logger.info("Source Transformer Step 2");</script>
          <type>JavaScript</type>
          <data>
            <entry>
              <string>Script</string>
              <string>logger.info("Source Transformer Step 2");</string>
            </entry>
          </data>
        </step>
      </steps>
      <inboundTemplate encoding="base64"></inboundTemplate>
      <outboundTemplate encoding="base64"></outboundTemplate>
      <inboundDataType>HL7V2</inboundDataType>
      <outboundDataType>HL7V2</outboundDataType>
      <inboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.4.2">
        <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.4.2">
          <handleRepetitions>true</handleRepetitions>
          <handleSubcomponents>true</handleSubcomponents>
          <useStrictParser>false</useStrictParser>
          <useStrictValidation>false</useStrictValidation>
          <stripNamespaces>true</stripNamespaces>
          <segmentDelimiter>\r</segmentDelimiter>
          <convertLineBreaks>true</convertLineBreaks>
        </serializationProperties>
        <deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.4.2">
          <useStrictParser>false</useStrictParser>
          <useStrictValidation>false</useStrictValidation>
          <segmentDelimiter>\r</segmentDelimiter>
        </deserializationProperties>
        <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.4.2">
          <splitType>MSH_Segment</splitType>
          <batchScript></batchScript>
        </batchProperties>
        <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.4.2">
          <segmentDelimiter>\r</segmentDelimiter>
          <successfulACKCode>AA</successfulACKCode>
          <successfulACKMessage></successfulACKMessage>
          <errorACKCode>AE</errorACKCode>
          <errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
          <rejectedACKCode>AR</rejectedACKCode>
          <rejectedACKMessage>Message Rejected.</rejectedACKMessage>
          <msh15ACKAccept>false</msh15ACKAccept>
          <dateFormat>yyyyMMddHHmmss</dateFormat>
        </responseGenerationProperties>
        <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.4.2">
          <successfulACKCode>AA,CA</successfulACKCode>
          <errorACKCode>AE,CE</errorACKCode>
          <rejectedACKCode>AR,CR</rejectedACKCode>
          <validateMessageControlId>false</validateMessageControlId>
          <originalMessageControlId>Destination_Encoded</originalMessageControlId>
          <originalIdMapVariable></originalIdMapVariable>
        </responseValidationProperties>
      </inboundProperties>
      <outboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.4.2">
        <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.4.2">
          <handleRepetitions>true</handleRepetitions>
          <handleSubcomponents>true</handleSubcomponents>
          <useStrictParser>false</useStrictParser>
          <useStrictValidation>false</useStrictValidation>
          <stripNamespaces>true</stripNamespaces>
          <segmentDelimiter>\r</segmentDelimiter>
          <convertLineBreaks>true</convertLineBreaks>
        </serializationProperties>
        <deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.4.2">
          <useStrictParser>false</useStrictParser>
          <useStrictValidation>false</useStrictValidation>
          <segmentDelimiter>\r</segmentDelimiter>
        </deserializationProperties>
        <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.4.2">
          <splitType>MSH_Segment</splitType>
          <batchScript></batchScript>
        </batchProperties>
        <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.4.2">
          <segmentDelimiter>\r</segmentDelimiter>
          <successfulACKCode>AA</successfulACKCode>
          <successfulACKMessage></successfulACKMessage>
          <errorACKCode>AE</errorACKCode>
          <errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
          <rejectedACKCode>AR</rejectedACKCode>
          <rejectedACKMessage>Message Rejected.</rejectedACKMessage>
          <msh15ACKAccept>false</msh15ACKAccept>
          <dateFormat>yyyyMMddHHmmss</dateFormat>
        </responseGenerationProperties>
        <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.4.2">
          <successfulACKCode>AA,CA</successfulACKCode>
          <errorACKCode>AE,CE</errorACKCode>
          <rejectedACKCode>AR,CR</rejectedACKCode>
          <validateMessageControlId>false</validateMessageControlId>
          <originalMessageControlId>Destination_Encoded</originalMessageControlId>
          <originalIdMapVariable></originalIdMapVariable>
        </responseValidationProperties>
      </outboundProperties>
    </transformer>
    <filter version="3.4.2">
      <rules>
        <rule>
          <sequenceNumber>0</sequenceNumber>
          <name>log</name>
          <data>
            <entry>
              <string>Script</string>
              <string>logger.info("Source Filter Step 1");

logger.info(msg['MSH']['MSH.11']['MSH.11.1'].toString()); // Processing code P o T

return true;</string>
            </entry>
          </data>
          <type>JavaScript</type>
          <script>logger.info("Source Filter Step 1");

logger.info(msg['MSH']['MSH.11']['MSH.11.1'].toString()); // Processing code P o T

return true;</script>
          <operator>NONE</operator>
        </rule>
        <rule>
          <sequenceNumber>1</sequenceNumber>
          <name>log 2</name>
          <data>
            <entry>
              <string>Script</string>
              <string>logger.info("Source Filter Step 2");

return true;</string>
            </entry>
          </data>
          <type>JavaScript</type>
          <script>logger.info("Source Filter Step 2");

return true;</script>
          <operator>AND</operator>
        </rule>
      </rules>
    </filter>
    <transportName>TCP Listener</transportName>
    <mode>SOURCE</mode>
    <enabled>true</enabled>
    <waitForPrevious>true</waitForPrevious>
  </sourceConnector>
  <destinationConnectors>
    <connector version="3.4.2">
      <metaDataId>1</metaDataId>
      <name>Destination 1</name>
      <properties class="com.mirth.connect.connectors.file.FileDispatcherProperties" version="3.4.2">
        <pluginProperties/>
        <destinationConnectorProperties version="3.4.2">
          <queueEnabled>false</queueEnabled>
          <sendFirst>false</sendFirst>
          <retryIntervalMillis>10000</retryIntervalMillis>
          <regenerateTemplate>false</regenerateTemplate>
          <retryCount>0</retryCount>
          <rotate>false</rotate>
          <includeFilterTransformer>false</includeFilterTransformer>
          <threadCount>1</threadCount>
          <validateResponse>false</validateResponse>
          <resourceIds class="linked-hash-map">
            <entry>
              <string>Default Resource</string>
              <string>[Default Resource]</string>
            </entry>
          </resourceIds>
          <queueBufferSize>1000</queueBufferSize>
        </destinationConnectorProperties>
        <scheme>FILE</scheme>
        <host>${destination_folder}</host>
        <outputPattern>${message.messageId}.hl7</outputPattern>
        <anonymous>true</anonymous>
        <username>anonymous</username>
        <password>anonymous</password>
        <timeout>10000</timeout>
        <secure>true</secure>
        <passive>true</passive>
        <validateConnection>true</validateConnection>
        <outputAppend>true</outputAppend>
        <errorOnExists>false</errorOnExists>
        <temporary>false</temporary>
        <binary>false</binary>
        <charsetEncoding>DEFAULT_ENCODING</charsetEncoding>
        <template>${message.encodedData}</template>
      </properties>
      <transformer version="3.4.2">
        <steps>
          <step>
            <sequenceNumber>0</sequenceNumber>
            <name>Log</name>
            <script>logger.info("Destination 1 Transformer");

// http://207.38.40.43/community/forums/showthread.php?p=44212
var ackMessage = ACKGenerator.generateAckResponse(connectorMessage.getRawData(), "AA", "Message Successfully Received");
responseMap.put("ackresp", ResponseFactory.getSentResponse(ackMessage));</script>
            <type>JavaScript</type>
            <data>
              <entry>
                <string>Script</string>
                <string>logger.info("Destination 1 Transformer");

// http://207.38.40.43/community/forums/showthread.php?p=44212
var ackMessage = ACKGenerator.generateAckResponse(connectorMessage.getRawData(), "AA", "Message Successfully Received");
responseMap.put("ackresp", ResponseFactory.getSentResponse(ackMessage));</string>
              </entry>
            </data>
          </step>
        </steps>
        <inboundTemplate encoding="base64"></inboundTemplate>
        <outboundTemplate encoding="base64"></outboundTemplate>
        <inboundDataType>HL7V2</inboundDataType>
        <outboundDataType>HL7V2</outboundDataType>
        <inboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.4.2">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.4.2">
            <handleRepetitions>true</handleRepetitions>
            <handleSubcomponents>true</handleSubcomponents>
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <stripNamespaces>true</stripNamespaces>
            <segmentDelimiter>\r</segmentDelimiter>
            <convertLineBreaks>true</convertLineBreaks>
          </serializationProperties>
          <deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.4.2">
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <segmentDelimiter>\r</segmentDelimiter>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.4.2">
            <splitType>MSH_Segment</splitType>
            <batchScript></batchScript>
          </batchProperties>
          <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.4.2">
            <segmentDelimiter>\r</segmentDelimiter>
            <successfulACKCode>AA</successfulACKCode>
            <successfulACKMessage></successfulACKMessage>
            <errorACKCode>AE</errorACKCode>
            <errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
            <rejectedACKCode>AR</rejectedACKCode>
            <rejectedACKMessage>Message Rejected.</rejectedACKMessage>
            <msh15ACKAccept>false</msh15ACKAccept>
            <dateFormat>yyyyMMddHHmmss</dateFormat>
          </responseGenerationProperties>
          <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.4.2">
            <successfulACKCode>AA,CA</successfulACKCode>
            <errorACKCode>AE,CE</errorACKCode>
            <rejectedACKCode>AR,CR</rejectedACKCode>
            <validateMessageControlId>false</validateMessageControlId>
            <originalMessageControlId>Destination_Encoded</originalMessageControlId>
            <originalIdMapVariable></originalIdMapVariable>
          </responseValidationProperties>
        </inboundProperties>
        <outboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.4.2">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.4.2">
            <handleRepetitions>true</handleRepetitions>
            <handleSubcomponents>true</handleSubcomponents>
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <stripNamespaces>true</stripNamespaces>
            <segmentDelimiter>\r</segmentDelimiter>
            <convertLineBreaks>true</convertLineBreaks>
          </serializationProperties>
          <deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.4.2">
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <segmentDelimiter>\r</segmentDelimiter>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.4.2">
            <splitType>MSH_Segment</splitType>
            <batchScript></batchScript>
          </batchProperties>
          <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.4.2">
            <segmentDelimiter>\r</segmentDelimiter>
            <successfulACKCode>AA</successfulACKCode>
            <successfulACKMessage></successfulACKMessage>
            <errorACKCode>AE</errorACKCode>
            <errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
            <rejectedACKCode>AR</rejectedACKCode>
            <rejectedACKMessage>Message Rejected.</rejectedACKMessage>
            <msh15ACKAccept>false</msh15ACKAccept>
            <dateFormat>yyyyMMddHHmmss</dateFormat>
          </responseGenerationProperties>
          <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.4.2">
            <successfulACKCode>AA,CA</successfulACKCode>
            <errorACKCode>AE,CE</errorACKCode>
            <rejectedACKCode>AR,CR</rejectedACKCode>
            <validateMessageControlId>false</validateMessageControlId>
            <originalMessageControlId>Destination_Encoded</originalMessageControlId>
            <originalIdMapVariable></originalIdMapVariable>
          </responseValidationProperties>
        </outboundProperties>
      </transformer>
      <responseTransformer version="3.4.2">
        <steps>
          <step>
            <sequenceNumber>0</sequenceNumber>
            <name>Log</name>
            <script>logger.info("Destination 1 Response Transformer");

/*
return "MSH|^~\&|IFENG||REGADT|MCM|20160729023454||ACK^A04^ACK|20160729023454|P|2.5\r" +
       "MSA|AA|"+ connectorMessage.getMessageId() +"\r";
*/</script>
            <type>JavaScript</type>
            <data>
              <entry>
                <string>Script</string>
                <string>logger.info("Destination 1 Response Transformer");

/*
return "MSH|^~\&|IFENG||REGADT|MCM|20160729023454||ACK^A04^ACK|20160729023454|P|2.5\r" +
       "MSA|AA|"+ connectorMessage.getMessageId() +"\r";
*/</string>
              </entry>
            </data>
          </step>
        </steps>
        <inboundTemplate encoding="base64"></inboundTemplate>
        <outboundTemplate encoding="base64"></outboundTemplate>
        <inboundDataType>HL7V2</inboundDataType>
        <outboundDataType>HL7V2</outboundDataType>
        <inboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.4.2">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.4.2">
            <handleRepetitions>true</handleRepetitions>
            <handleSubcomponents>true</handleSubcomponents>
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <stripNamespaces>true</stripNamespaces>
            <segmentDelimiter>\r</segmentDelimiter>
            <convertLineBreaks>true</convertLineBreaks>
          </serializationProperties>
          <deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.4.2">
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <segmentDelimiter>\r</segmentDelimiter>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.4.2">
            <splitType>MSH_Segment</splitType>
            <batchScript></batchScript>
          </batchProperties>
          <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.4.2">
            <segmentDelimiter>\r</segmentDelimiter>
            <successfulACKCode>AA</successfulACKCode>
            <successfulACKMessage></successfulACKMessage>
            <errorACKCode>AE</errorACKCode>
            <errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
            <rejectedACKCode>AR</rejectedACKCode>
            <rejectedACKMessage>Message Rejected.</rejectedACKMessage>
            <msh15ACKAccept>false</msh15ACKAccept>
            <dateFormat>yyyyMMddHHmmss</dateFormat>
          </responseGenerationProperties>
          <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.4.2">
            <successfulACKCode>AA,CA</successfulACKCode>
            <errorACKCode>AE,CE</errorACKCode>
            <rejectedACKCode>AR,CR</rejectedACKCode>
            <validateMessageControlId>false</validateMessageControlId>
            <originalMessageControlId>Destination_Encoded</originalMessageControlId>
            <originalIdMapVariable></originalIdMapVariable>
          </responseValidationProperties>
        </inboundProperties>
        <outboundProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DataTypeProperties" version="3.4.2">
          <serializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2SerializationProperties" version="3.4.2">
            <handleRepetitions>true</handleRepetitions>
            <handleSubcomponents>true</handleSubcomponents>
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <stripNamespaces>true</stripNamespaces>
            <segmentDelimiter>\r</segmentDelimiter>
            <convertLineBreaks>true</convertLineBreaks>
          </serializationProperties>
          <deserializationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2DeserializationProperties" version="3.4.2">
            <useStrictParser>false</useStrictParser>
            <useStrictValidation>false</useStrictValidation>
            <segmentDelimiter>\r</segmentDelimiter>
          </deserializationProperties>
          <batchProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2BatchProperties" version="3.4.2">
            <splitType>MSH_Segment</splitType>
            <batchScript></batchScript>
          </batchProperties>
          <responseGenerationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseGenerationProperties" version="3.4.2">
            <segmentDelimiter>\r</segmentDelimiter>
            <successfulACKCode>AA</successfulACKCode>
            <successfulACKMessage></successfulACKMessage>
            <errorACKCode>AE</errorACKCode>
            <errorACKMessage>An Error Occurred Processing Message.</errorACKMessage>
            <rejectedACKCode>AR</rejectedACKCode>
            <rejectedACKMessage>Message Rejected.</rejectedACKMessage>
            <msh15ACKAccept>false</msh15ACKAccept>
            <dateFormat>yyyyMMddHHmmss</dateFormat>
          </responseGenerationProperties>
          <responseValidationProperties class="com.mirth.connect.plugins.datatypes.hl7v2.HL7v2ResponseValidationProperties" version="3.4.2">
            <successfulACKCode>AA,CA</successfulACKCode>
            <errorACKCode>AE,CE</errorACKCode>
            <rejectedACKCode>AR,CR</rejectedACKCode>
            <validateMessageControlId>false</validateMessageControlId>
            <originalMessageControlId>Destination_Encoded</originalMessageControlId>
            <originalIdMapVariable></originalIdMapVariable>
          </responseValidationProperties>
        </outboundProperties>
      </responseTransformer>
      <filter version="3.4.2">
        <rules>
          <rule>
            <sequenceNumber>0</sequenceNumber>
            <name>Log</name>
            <data>
              <entry>
                <string>Script</string>
                <string>logger.info("Destination 1 Filter");

return true;</string>
              </entry>
            </data>
            <type>JavaScript</type>
            <script>logger.info("Destination 1 Filter");

return true;</script>
            <operator>NONE</operator>
          </rule>
        </rules>
      </filter>
      <transportName>File Writer</transportName>
      <mode>DESTINATION</mode>
      <enabled>true</enabled>
      <waitForPrevious>true</waitForPrevious>
    </connector>
  </destinationConnectors>
  <preprocessingScript>// Modify the message variable below to pre process data

logger.info("Channel Preprocessor");

return message;</preprocessingScript>
  <postprocessingScript>// This script executes once after a message has been processed
// Responses returned from here will be stored as "Postprocessor" in the response map
logger.info("Channel Postprocessor");

return;</postprocessingScript>
  <deployScript>// This script executes once when the channel is deployed
// You only have access to the globalMap and globalChannelMap here to persist data

logger.info("Channel Deploy");

return;</deployScript>
  <undeployScript>// This script executes once when the channel is undeployed
// You only have access to the globalMap and globalChannelMap here to persist data

logger.info("Channel Undeploy");

return;</undeployScript>
  <properties version="3.4.2">
    <clearGlobalChannelMap>true</clearGlobalChannelMap>
    <messageStorageMode>DEVELOPMENT</messageStorageMode>
    <encryptData>false</encryptData>
    <removeContentOnCompletion>false</removeContentOnCompletion>
    <removeOnlyFilteredOnCompletion>false</removeOnlyFilteredOnCompletion>
    <removeAttachmentsOnCompletion>false</removeAttachmentsOnCompletion>
    <initialState>STARTED</initialState>
    <storeAttachments>false</storeAttachments>
    <tags class="linked-hash-set"/>
    <metaDataColumns>
      <metaDataColumn>
        <name>SOURCE</name>
        <type>STRING</type>
        <mappingName>mirth_source</mappingName>
      </metaDataColumn>
      <metaDataColumn>
        <name>TYPE</name>
        <type>STRING</type>
        <mappingName>mirth_type</mappingName>
      </metaDataColumn>
    </metaDataColumns>
    <attachmentProperties version="3.4.2">
      <type>None</type>
      <properties/>
    </attachmentProperties>
    <archiveEnabled>true</archiveEnabled>
    <resourceIds class="linked-hash-map">
      <entry>
        <string>Default Resource</string>
        <string>[Default Resource]</string>
      </entry>
    </resourceIds>
  </properties>
  <codeTemplateLibraries/>
</channel>


KangerTech Dripbox E-Cigarette Starter Kit is an extremely easy to use MOD that has a Subdrip atomizer with a replaceable prebuilt coil and squeezable bottle to flow the juice into the atomizer. It has a 60W output and a 0.2ohm coil resistance. It is operated by a 18650 battery that needs to be bought separately.
This Dripbox kit along with its Subdrip atomizer is an extreme user-friendly MOD. It doesn't make the user stand in need to build own coils as a dripping atomizer.
The Subdrip of this Dripbox allows the user to swap a readily built coil within seconds. That is, by unscrewing the threaded old prebuilt coil from the atomizer base deck and screwing-in the new one.
Also, The e-liquid Filler has two ends that connect the liquid bottle with the atomizer. The user should squeeze the bottom of the container to allow the juice to flow into the readily built coil.
This Mod has a 60W output and a 0.2ohm coil resistance. Moreover, it houses a single 18650 battery that doesn't come with the kit and needs to be bought separately.
The juice bottle capacity is 7ml or 7cc. Also, the Subdrip atomizer has a 510 threading connection, 22mm diameter, and features an adjustable airflow control.


text:
HS softball: Nazareth starting to look like team that was expected in rout of Liberty
By Keith Groller
Apr 11, 2019 | 10:25 PM
Nazareth wins third game in a row with lopsided victory over Liberty in an Eastern Pennsylvania Conference softball game
Now that's more like it.
When the Nazareth softball team began the season 1-3 and 2-4, questions abounded, namely, what's wrong?
No one is asking that anymore.
The Blue Eagles won their third straight game early Thursday night in Bethlehem, blasting their way to a 13-2 Eastern Pennsylvania Conference rout of Liberty.
In getting over the .500 mark for the first time this season, Nazareth clubbed three home runs and collected 14 hits.
[More High School Sports] Escape the Rock wrestling: Stroudsburg's Lenny Pinto hits another milestone; Northampton freshman Carson Wagner takes another step in progression »
The offensive explosion made life easy for senior pitcher Samantha Gorkos, who seems to be rounding into the dominant form she had a year ago in leading the Blue Eagles to a 14-2 league mark, a 22-5 record overall and the PIAA Class 6A semifinals.
Gorkos allowed just two hits and struck out 13.
"We stank early and I thought we might have dug ourselves a hole we couldn't get out of in terms of making the league playoffs, but we're playing like we can now," Nazareth coach Tony Cocca said. "We can hit. We weren't doing that early."
[More High School Sports] Injured Bethlehem Catholic wrestler Andrew Harmon returns to the mat, then defaults again »
That lack of hitting was evident in a 1-0 loss to Parkland on April 1, but since then the Blue Eagles have scored 53 runs in five games.
Perhaps more importantly, Gorkos is looking like she did in 2018 when she was The Morning Call's co-pitcher of the year with 22 wins, 252 strikeouts in 167 2/3 innings, a 0.83 ERA just 93 hits allowed.
"She's just starting to get right and that's the scary thing," Cocca said. "In the beginning of the season, she had a different pitching style and was trying something different, but it wasn't working. Still, we lost to Emmaus, Parkland and Northampton by just one run. She does have a tendency to give up the longball this year and we're working on that."
[More High School Sports] High school wrestling: Live updates from the Escape the Rock tournament »
Gorkos gave up a two-run shot to opposing pitcher Paige Zigmund in the sixth inning following an error. Alanysse Solomon was the only other Hurricane to get a hit, a double in the third inning and Julie Curti was hit by a pitch. That was it for Liberty baserunners.
"This game was the kind that can set the tone for the rest of the season," Gorkos said. "We're just coming full force for everybody. We just got off to a rough start and needed to find our footing. But everything's started to come together now."
That's especially true of the Nazareth lineup.
[More High School Sports] Girls basketball: Taliyah Medina reaches milestone as Bethlehem Catholic downs Nazareth »
Madison Straub, the No. 9 hitter in the order, celebrated her 18th birthday a day early with a three-run home run in an eight-run seventh inning.
Sophomore Rivers Edwards got the attack started with a home run in the first inning and had three hits overall.
Serena Smith had a two-run home run in a four-run second and had two hits overall.
[More High School Sports] Lehigh Valley high school scores and stats: Jan. 17 »
Jalina Edwards had two hits. Daphney Adams had a two-run single and Gorkos capped her day with an RBI double.
"We brought a machine out last night at practice, turned it up and the girls worked hard and responded," Cocca said. "Now it's just a matter of following it up."
Liberty lost for just second the time in eight games.
[More High School Sports] Saucon Valley, Wilson wrestlers focused on sharpness, health »
Barb Wismer, the Hurricanes interim coach while Sam Carrodo recovers from a health condition, said it was just one of those days for her team.
"Sam Gorkos pitched a phenomenal game and had us back on our heels," Wismer said. "We just weren't the hitting team we normally are and we've been all season. We know we're better than this. We know we can hang with the best teams in this league. Today just wasn't our day."
Liberty is back in action Saturday at 11 a.m. against Tunkhannock. Nazareth will play at Pleasant Valley at noon on Saturday.
Reporter Keith Groller can be reached at 610-820-6740 or at kgroller@mcall.com
Most Read • High School Sports


Peace, anti-hunger, anti-poverty, environmental and community groups will gather in the nation's Capitol on Tuesday December 10 to observe International Human Rights Day by calling upon Congress to slash runaway, dangerous military spending and meet critical domestic needs instead.
The groups will hold a news conference and media availability at 10 AM. They will then deliver letters and petitions signed by more than one hundred organization and 7,000 individuals to Cong. Ryan and Sen. Murray, the Co-Chairs of the Congressional budget committee charged with passing a budget resolution by December 13. The Committee is seeking to reduce the nominal defense cuts presently required under the sequestration agreement.
The UN General Assembly proclaimed 10 December as Human Rights Day in 1950. In 2006 the UN focused on the issue of poverty, declaring the poverty prevails as the gravest human rights challenge in the world. The massive expenditures on the military is a significant factor in poverty and income inequality in America . Human rights also includes the right to be free from the threat of violence and war.
72 years after the nation was propelled into World War II by the attack on Pearl Harbor , the groups say it is time for the country to end its obsolete wartime budget - as it had done after every prior major conflict. The country's failure to heed President Eisenhower's warning about the growth in power of the Congressional Military Industrial complex has resulted in a massive military budget that bears no relation to the country's legitimate defense needs.
Consuming more than half of all discretionary federal spending, the US military budget is roughly equal to the rest of the world combined. The groups charge that the military budget has become primarily corporate welfare and a tool to further the interests of multinational corporations. A hundred billion dollars is spent to maintain more than one thousand military bases in 130 countries, including Europe, Japan and Korea . Much of the Pentagon spending is wasted, with high levels of graft, overhead, outside consultants, and duplicative and unnecessary weapon systems. Rather than having an energy policy creating resource wars and climate chaos, the US should invest in renewable energy to create jobs, avert climate disaster, and make wars for oil obsolete.
Groups initiating the campaign include the Backbone Campaign; Coalition Against Nukes; Code Pink; Fellowship of Reconciliation, Freepress.org; Hunger Action Network of NYS; Global Network Against Weapons & Nuclear Power in Space; Green Shadow Cabinet; Green Party of NY; Hip Hop Congress; Liberty Tree Foundation for the Democratic Revolution; No FEAR Coalition; Organic Consumers Association; Poor People's Economic Human Rights Campaign; PopularResistance.org; Roots Action; and US Labor Against War.
Speakers at the news conference will include: Jill Stein, Green Shadow Cabinet; Cheri Honkala, Poor People's Economic Human Rights Campaign; David Swanson, Roots Action; Mark Dunlea, Hunger Action Network of New York State; Dr. David Schwartzman, Professor Emeritus Howard University and community activist.


Boxer Replay M202220. Discover this boxer of extreme comfort thanks to its majority cotton material. Nice to wear, you will love it. Its floral motifs are in perfect accord with the season. Elastic belt logoed in the name of the brand. 93% Cotton, 7% Elastane.


This beautiful classic finca with splendid views has been spoiled with total privacy. The property sits on a very large plot of approximately 10,450m2 with a living area of approximately 280m2. This finca has been distributed over two levels. On the ground floor you will find a living room with a fireplace, a dining room, a fully equipped kitchen with a dining area, a TV room, an office, a utility room, a store room and a guest toilet. The upper floor disposes of a master bedroom with an en-suite bathroom, three further bedrooms and a bathroom. The outbuilding can be used as several options such as a guest apartment. Other than the enormous amount of land you will find various covered and uncovered terraces, a good sized swimming pool and a dining area. Other characteristics of this traditional property include high ceilings, wooden beams, license for holiday letting, a well and central heating. This finca is located in the village of Es Verger close to Esporles. Esporles is a village located in the mountains of Sierra de Tramuntana. This peaceful village still maintains its beautiful features such as the typical stone faced houses.


text:
Campuses + InternshipsHigh School Pre-College
UCLA Business
U Colorado Boulder
U Texas Austin
U Michigan
U Michigan & UCLA
U Miami
Georgetown U
Penn Law
Pace NYC
Cambridge U
City U London
Cambridge U & London
Yale-NUS Singapore
UCLA Middle School Enrichment
CU-Boulder Middle School Enrichment
Georgetown Middle School Enrichment
High School Internships
Sports Management & E-Sports
Middle School Enrichment
Enrollment Terms & Conditions
Tuition / Travel Protection Plan
Campus & Location Finder
Unique opportunities offered by Summer Discovery
Do you enjoy Photography and Film, Drawing and Painting, or Acting? Are you looking to step up your game on the dance floor? Or develop amateur fashion sketches? Our Arts & Design programs explore many different forms of Art and our teach you the important concepts of visual art, literary art, and performing art. We place emphasis on your individual artistic direction and allow unique avenues for exploration. Our programs are geared toward high school students and specified to fit the learning styles considered most effective for young adults.
OUR HANDS-ON ARTS & Design PROGRAMS ALLOW YOU TO:
Learn new techniques in your chosen art form
Explore traditional and alternative approaches to art
Develop a keen eye for artistic detail
Exhibit original work to peers and receive feedback
As you continue to explore and develop your artistic talents, gain hands-on experience that can be utilized in future endeavors. Your experience at Summer Discovery will make you a more well-rounded, knowledgeable individual with enhanced artistic, academic, and life skills.
HERE'S WHERE YOU CAN FIND ARTS & DESIGN:
UCLALos Angeles, California Special classes in Business, Sports, Screenwriting, Acting, and LeadershipTuition ranging from $2,999 - $11,499For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
UC Santa BarbaraSanta Barbara, CaliforniaSpecial courses in Marine Science, Surfing, and Research Mentorship ProgramTuition ranging from $7,899 - $10,499For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
U Texas AustinAustin, TexasSpecial classes in Engineering, Sports Management, Medicine, Psychology, and FashionTuition ranging from $3,599 - $6,599For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
U MichiganAnn Arbor, MichiganSpecial classes in Business, Sport Management, Architecture, and MusicTuition ranging from $5,199 - $9,399For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
U Michigan & UCLAAnn Arbor, Michigan & Los Angeles, California2 or 3 Weeks @ Michigan & 3 Weeks @ UCLATuition ranging from $10,999 - $12,699For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
U MiamiCoral Gables, FloridaSpecial programs in Medicine, Business, Marine Biology, Sports, Engineering, and LawTuition ranging from $3,808 - $6,250For students completing grades 9, 10, 11 (ages 14-17)Apply Now
Georgetown UWashington, D.C.Special classes in Law & Government, Business & Entrepreneurship, and LeadershipTuition ranging from $2,999 - $8,799For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
PennPhiladelphia, PennsylvaniaIvy League programs in Science, Research, Social Justice, and MathematicsDates & Tuition TBDFor students completing grades 9, 10, 11 (ages 14-18)Apply Now
Johns HopkinsBaltimore, MarylandSpecial programs in Engineering, Writing, Mathematics, and the Arts and SciencesTuition ranging from $2,300 to $12,150For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
WellesleyWellesley, Massachusetts Pre-college residential programs for young womenTuition ranging from $1,800 - $8,500For students completing grades 8, 9, 10, 11, 12 (ages 15-18)Apply Now
Cambridge UCambridge, EnglandSpecial classes in Cultural Immersion, Global Business, and GeneticsTuition ranging from $5,799 - $9,299For students completing grades 9, 10, 11, 12 (ages 14-18)Apply Now
Cambridge U & LondonCambridge, England & London, England2 Weeks @ Cambridge & 2 Weeks @ LondonTuition $9,299For students completing grades 9, 10, 11, 12 (ages 15-18)Apply Now
UCLA Middle School EnrichmentLos Angeles, CaliforniaResidential and commuter programs for Middle School studentsTuition ranging from $3,699 - $7,399For students completing grades 6, 7, 8 (ages 12-14)Apply Now
Georgetown Middle School EnrichmentWashington, DCResidential and commuter programs for Middle School studentsTuition ranging from $2,999 - $5,599For students completing grades 6, 7, 8 (ages 12-14)Apply Now
Location AllAsiaBostonCambridge UniversityCity University LondonEast CoastEnglandGeorgetown UniversityJohns Hopkins UniversityLondonLos AngelesNew York CityPace University NYCThe Wharton SchoolUC Santa BarbaraUCLAUnited StatesUniversity of ColoradoUniversity of MiamiUniversity of MichiganUniversity of PennsylvaniaUniversity of Texas at AustinYale-NUS College Singapore
Current Grade All6789101112
Length All1 Weeks2 Weeks3 Weeks4 Weeks5 Weeks6 Weeks
Academic Interest - Select -Arts & DesignBusiness & EntrepreneurshipLaw & GovernmentLeadershipLife SkillsMedicineSocial SciencesSports Management & E-SportsSTEMHigh School InternshipsMiddle School Enrichment
Get InfoApply Now
HomeArts & Design
A-Star Education Member
516-621-3939 - General
Mon. - Thurs. 9:30 AM - 8:00 PM EST
Fri. 9:30 AM - 5:00 PM EST
Sat. hours vary
info@summerdiscovery.com
© 2020 Musiker Discovery Programs, Inc. All rights reserved.
Site by Baby Steps


Neighborhood for Emerging-World Technologies-LUMS, the Information Technology University (ITU-Punjab) and the Punjab Information Technology Board (PITB) organized the first ever hands-on cloud computing workshop in Pakistan on 17th – 21st April, 2013 at Arfa Software Technology Park. This workshop had an aim to train professionals from the local software industry on the design and implementation of large-scale distributed systems and cloud computing technologies.
Zubair Nabi has degrees in Engineering and Computer Science from NU-FAST, LUMS, and Cambridge. He is currently a part of the faculty at ITU, Punjab. Zubair's research interests broadly include datacenter networks, data intensive computing, and cloud computing. On and off, he also likes to dabble in pervasive computing, p2p systems, VANETs, and the semantic web. In addition, he is also an open-source buff and has contributed to a number of open source projects. Most notably, over the course of multiple Google Summers of Code, he has been involved in the development of a global Internet connectivity monitor that leverages crowd-sourcing of desktop and mobile devices to act as a watch-dog against Internet censorship. He is currently working on MR+, a radically new and improved implementation of Google's MapReduce paradigm, and Polyversal TCP, an evolutionary version of TCP that embraces network heterogeneity to allow transport customization.
He strongly believes that the future of computing lies in Cloud Computing and Big Data; the power of both can be leveraged to enable unprecedented data analytics to improve the human condition. Using this workshop as a conduit, he aims to equip practitioners from the local software industry with the right tools to ride the Cloud Computing and Big Data wave.


text:
{-# LANGUAGE OverloadedStrings #-}
module Cheapskate.Util (
    joinLines
  , tabFilter
  , isWhitespace
  , isEscapable
  , normalizeReference
  , Scanner
  , scanIndentSpace
  , scanNonindentSpace
  , scanSpacesToColumn
  , scanChar
  , scanBlankline
  , scanSpaces
  , scanSpnl
  , nfb
  , nfbChar
  , upToCountChars
  ) where

import Data.Text (Text)
import qualified Data.Text as T
import Data.Char
import Control.Applicative ()
import Cheapskate.ParserCombinators

-- Utility functions.

-- Like T.unlines but does not add a final newline.
-- Concatenates lines with newlines between.
joinLines :: [Text] -> Text
joinLines = T.intercalate "\n"

-- Convert tabs to spaces using a 4-space tab stop.
tabFilter :: Text -> Text
tabFilter = T.concat . pad . T.split (== '\t')
  where pad []  = []
        pad [t] = [t]
        pad (t:ts) = let tl = T.length t
                         n  = tl + 4 - (tl `mod` 4)
                         in  T.justifyLeft n ' ' t : pad ts

-- These are the whitespace characters that are significant in
-- parsing markdown. We can treat \160 (nonbreaking space) etc.
-- as regular characters.  This function should be considerably
-- faster than the unicode-aware isSpace from Data.Char.
isWhitespace :: Char -> Bool
isWhitespace ' '  = True
isWhitespace '\t' = True
isWhitespace '\n' = True
isWhitespace '\r' = True
isWhitespace _    = False

-- The original Markdown only allowed certain symbols
-- to be backslash-escaped.  It was hard to remember
-- which ones could be, so we now allow any ascii punctuation mark or
-- symbol to be escaped, whether or not it has a use in Markdown.
isEscapable :: Char -> Bool
isEscapable c = isAscii c && (isSymbol c || isPunctuation c)

-- Link references are case sensitive and ignore line breaks
-- and repeated spaces.
-- So, [APPLES are good] == [Apples are good] ==
-- [Apples
-- are     good].
normalizeReference :: Text -> Text
normalizeReference = T.toCaseFold . T.concat . T.split isWhitespace

-- Scanners are implemented here as attoparsec parsers,
-- which consume input and capture nothing.  They could easily
-- be implemented as regexes in other languages, or hand-coded.
-- With the exception of scanSpnl, they are all intended to
-- operate on a single line of input (so endOfInput = endOfLine).
type Scanner = Parser ()

-- Scan four spaces.
scanIndentSpace :: Scanner
scanIndentSpace = () <$ count 4 (skip (==' '))

scanSpacesToColumn :: Int -> Scanner
scanSpacesToColumn col = do
  currentCol <- column <$> getPosition
  case col - currentCol of
       n | n >= 1 -> () <$ (count n (skip (==' ')))
         | otherwise -> return ()

-- Scan 0-3 spaces.
scanNonindentSpace :: Scanner
scanNonindentSpace = () <$ upToCountChars 3 (==' ')

-- Scan a specified character.
scanChar :: Char -> Scanner
scanChar c = skip (== c) >> return ()

-- Scan a blankline.
scanBlankline :: Scanner
scanBlankline = scanSpaces *> endOfInput

-- Scan 0 or more spaces
scanSpaces :: Scanner
scanSpaces = skipWhile (==' ')

-- Scan 0 or more spaces, and optionally a newline
-- and more spaces.
scanSpnl :: Scanner
scanSpnl = scanSpaces *> option () (char '\n' *> scanSpaces)

-- Not followed by: Succeed without consuming input if the specified
-- scanner would not succeed.
nfb :: Parser a -> Scanner
nfb = notFollowedBy

-- Succeed if not followed by a character. Consumes no input.
nfbChar :: Char -> Scanner
nfbChar c = nfb (skip (==c))

upToCountChars :: Int -> (Char -> Bool) -> Parser Text
upToCountChars cnt f =
  scan 0 (\n c -> if n < cnt && f c then Just (n+1) else Nothing)


Colors for Adult Coloring Books – coloring books for grown ups 101 how to color best colored pencils for adult coloring books adult coloring books are intricate and have tiny details even if you have an attachment to the waxy smell of crayolas they are too fat to use for filling in tiny spaces my number 1 go to material for coloring is colored pencils but i have a soft spot in my heart for art markers .
We hope you can find what you need here. We always effort to show a picture with HD resolution or at least with perfect images. √ Colors for Adult Coloring Books or Kaleidoscope Wonders Color Art ⋆ Look at What I Made can be beneficial inspiration for those who seek an image according specific categories; you can find it in this site. Finally all pictures we have been displayed in this site will inspire you all..