| Package | Description |
|---|---|
| proguard.classfile.attribute.annotation |
This package contains classes to represent the annotation attributes inside
class files.
|
| proguard.classfile.attribute.annotation.target | |
| proguard.classfile.attribute.annotation.target.visitor | |
| proguard.classfile.attribute.annotation.visitor |
This package contains visitors for annotation attributes and their components.
|
| proguard.classfile.editor |
This package contains visitors to edit byte code.
|
| proguard.classfile.io |
This package contains classes for reading and writing class files.
|
| proguard.classfile.util |
This package contains utility classes for processing class files.
|
| proguard.classfile.visitor |
This package contains interfaces and classes for processing class files from
the
package using
the visitor pattern. |
| Modifier and Type | Method and Description |
|---|---|
void |
TypeAnnotation.typePathInfosAccept(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TypePathInfoVisitor typePathVisitor)
Applies the given visitor to all type path elements.
|
| Constructor and Description |
|---|
RuntimeInvisibleTypeAnnotationsAttribute(int u2attributeNameIndex,
int u2annotationsCount,
TypeAnnotation[] annotations)
Creates an initialized RuntimeInvisibleTypeAnnotationsAttribute.
|
RuntimeVisibleTypeAnnotationsAttribute(int u2attributeNameIndex,
int u2annotationsCount,
TypeAnnotation[] annotations)
Creates an initialized RuntimeVisibleTypeAnnotationsAttribute.
|
TypeAnnotationsAttribute(int u2attributeNameIndex,
int u2annotationsCount,
TypeAnnotation[] annotations)
Creates an initialized TypeAnnotationsAttribute.
|
| Modifier and Type | Method and Description |
|---|---|
void |
TypeParameterBoundTargetInfo.accept(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
EmptyTargetInfo.accept(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
TargetInfo.accept(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Accepts the given visitor, in the context of a type annotation on a field.
|
void |
LocalVariableTargetInfo.accept(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
TypeArgumentTargetInfo.accept(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
TargetInfo.accept(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Accepts the given visitor, in the context of a type annotation code.
|
void |
OffsetTargetInfo.accept(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
CatchTargetInfo.accept(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
ThrowsTargetInfo.accept(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
TypeParameterBoundTargetInfo.accept(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
EmptyTargetInfo.accept(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
TargetInfo.accept(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Accepts the given visitor, in the context of a type annotation on a method.
|
void |
FormalParameterTargetInfo.accept(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
TypeParameterTargetInfo.accept(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
LocalVariableTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Lets the visitor visit, with Method and CodeAttribute null.
|
void |
ThrowsTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Lets the visitor visit, with Method null.
|
void |
TypeParameterBoundTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
TypeArgumentTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Lets the visitor visit, with Method and CodeAttribute null.
|
void |
EmptyTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Lets the visitor visit, with Field null.
|
void |
TargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Accepts the given visitor, in the context of a type annotation on a class.
|
void |
SuperTypeTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
OffsetTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Lets the visitor visit, with Method and CodeAttribute null.
|
void |
FormalParameterTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Lets the visitor visit, with Method null.
|
void |
TypeParameterTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor) |
void |
CatchTargetInfo.accept(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfoVisitor targetInfoVisitor)
Lets the visitor visit, with Method and CodeAttribute null.
|
void |
LocalVariableTargetInfo.targetElementsAccept(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetElementVisitor localVariableTargetElementVisitor)
Applies the given visitor to all target elements.
|
| Modifier and Type | Method and Description |
|---|---|
void |
TargetInfoVisitor.visitCatchTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
CatchTargetInfo catchTargetInfo) |
void |
TargetInfoVisitor.visitEmptyTargetInfo(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
EmptyTargetInfo emptyTargetInfo) |
void |
TargetInfoVisitor.visitEmptyTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
EmptyTargetInfo emptyTargetInfo) |
void |
TargetInfoVisitor.visitFormalParameterTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
FormalParameterTargetInfo formalParameterTargetInfo) |
void |
LocalVariableTargetElementVisitor.visitLocalVariableTargetElement(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo,
LocalVariableTargetElement localVariableTargetElement) |
void |
TargetInfoVisitor.visitLocalVariableTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo) |
void |
TargetInfoVisitor.visitOffsetTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
OffsetTargetInfo offsetTargetInfo) |
void |
TargetInfoVisitor.visitSuperTypeTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
SuperTypeTargetInfo superTypeTargetInfo) |
void |
TargetInfoVisitor.visitThrowsTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
ThrowsTargetInfo throwsTargetInfo) |
void |
TargetInfoVisitor.visitTypeArgumentTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TypeArgumentTargetInfo typeArgumentTargetInfo) |
void |
TargetInfoVisitor.visitTypeParameterBoundTargetInfo(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
TargetInfoVisitor.visitTypeParameterBoundTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
TargetInfoVisitor.visitTypeParameterBoundTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
TargetInfoVisitor.visitTypeParameterTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TypeParameterTargetInfo typeParameterTargetInfo) |
void |
TargetInfoVisitor.visitTypeParameterTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterTargetInfo typeParameterTargetInfo) |
| Modifier and Type | Method and Description |
|---|---|
void |
TypeAnnotationVisitor.visitTypeAnnotation(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation) |
void |
TypeAnnotationVisitor.visitTypeAnnotation(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation) |
void |
TypeAnnotationVisitor.visitTypeAnnotation(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation) |
void |
TypeAnnotationVisitor.visitTypeAnnotation(Clazz clazz,
TypeAnnotation typeAnnotation) |
void |
TypePathInfoVisitor.visitTypePathInfo(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
void |
TypePathInfoVisitor.visitTypePathInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
void |
TypePathInfoVisitor.visitTypePathInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
void |
TypePathInfoVisitor.visitTypePathInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
| Modifier and Type | Method and Description |
|---|---|
void |
VariableRemapper.visitAnyTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfo targetInfo) |
void |
CodeAttributeEditor.visitAnyTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfo targetInfo) |
void |
VariableRemapper.visitLocalVariableTargetElement(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo,
LocalVariableTargetElement localVariableTargetElement) |
void |
CodeAttributeEditor.visitLocalVariableTargetElement(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo,
LocalVariableTargetElement localVariableTargetElement) |
void |
VariableRemapper.visitLocalVariableTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo) |
void |
CodeAttributeEditor.visitLocalVariableTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo) |
void |
CodeAttributeEditor.visitOffsetTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
OffsetTargetInfo offsetTargetInfo) |
void |
VariableRemapper.visitTypeAnnotation(Clazz clazz,
TypeAnnotation typeAnnotation) |
void |
CodeAttributeEditor.visitTypeAnnotation(Clazz clazz,
TypeAnnotation typeAnnotation) |
| Modifier and Type | Method and Description |
|---|---|
void |
ProgramClassReader.visitCatchTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
CatchTargetInfo catchTargetInfo) |
void |
ProgramClassReader.visitEmptyTargetInfo(Clazz clazz,
Member member,
TypeAnnotation typeAnnotation,
EmptyTargetInfo emptyTargetInfo) |
void |
ProgramClassReader.visitFormalParameterTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
FormalParameterTargetInfo formalParameterTargetInfo) |
void |
ProgramClassReader.visitLocalVariableTargetElement(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo,
LocalVariableTargetElement localVariableTargetElement) |
void |
ProgramClassReader.visitLocalVariableTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo) |
void |
ProgramClassReader.visitOffsetTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
OffsetTargetInfo offsetTargetInfo) |
void |
ProgramClassReader.visitSuperTypeTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
SuperTypeTargetInfo superTypeTargetInfo) |
void |
ProgramClassReader.visitThrowsTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
ThrowsTargetInfo throwsTargetInfo) |
void |
ProgramClassReader.visitTypeAnnotation(Clazz clazz,
TypeAnnotation typeAnnotation) |
void |
ProgramClassReader.visitTypeArgumentTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TypeArgumentTargetInfo typeArgumentTargetInfo) |
void |
ProgramClassReader.visitTypeParameterBoundTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
ProgramClassReader.visitTypeParameterTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterTargetInfo typeParameterTargetInfo) |
void |
ProgramClassReader.visitTypePathInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
| Modifier and Type | Method and Description |
|---|---|
void |
SimplifiedVisitor.visitAnyTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TargetInfo targetInfo)
Visits any type of TargetInfo.
|
void |
SimplifiedVisitor.visitCatchTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
CatchTargetInfo catchTargetInfo) |
void |
SimplifiedVisitor.visitEmptyTargetInfo(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
EmptyTargetInfo emptyTargetInfo) |
void |
SimplifiedVisitor.visitEmptyTargetInfo(Clazz clazz,
Member member,
TypeAnnotation typeAnnotation,
EmptyTargetInfo emptyTargetInfo)
Visits the given EmptyTargetInfo of any type of class member.
|
void |
SimplifiedVisitor.visitEmptyTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
EmptyTargetInfo emptyTargetInfo) |
void |
SimplifiedVisitor.visitFormalParameterTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
FormalParameterTargetInfo formalParameterTargetInfo) |
void |
SimplifiedVisitor.visitLocalVariableTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo) |
void |
SimplifiedVisitor.visitOffsetTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
OffsetTargetInfo offsetTargetInfo) |
void |
SimplifiedVisitor.visitSuperTypeTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
SuperTypeTargetInfo superTypeTargetInfo) |
void |
SimplifiedVisitor.visitThrowsTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
ThrowsTargetInfo throwsTargetInfo) |
void |
SimplifiedVisitor.visitTypeAnnotation(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation) |
void |
SimplifiedVisitor.visitTypeAnnotation(Clazz clazz,
Member member,
TypeAnnotation typeAnnotation)
Visits the given TypeAnnotation of any type of class member.
|
void |
SimplifiedVisitor.visitTypeAnnotation(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation) |
void |
SimplifiedVisitor.visitTypeAnnotation(Clazz clazz,
Method method,
int parameterIndex,
TypeAnnotation typeAnnotation) |
void |
SimplifiedVisitor.visitTypeAnnotation(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation) |
void |
SimplifiedVisitor.visitTypeAnnotation(Clazz clazz,
TypeAnnotation typeAnnotation) |
void |
SimplifiedVisitor.visitTypeArgumentTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TypeArgumentTargetInfo typeArgumentTargetInfo) |
void |
SimplifiedVisitor.visitTypeParameterBoundTargetInfo(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
SimplifiedVisitor.visitTypeParameterBoundTargetInfo(Clazz clazz,
Member member,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo)
Visits the given TypeParameterBoundTargetInfo of any type of class member.
|
void |
SimplifiedVisitor.visitTypeParameterBoundTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
SimplifiedVisitor.visitTypeParameterBoundTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
SimplifiedVisitor.visitTypeParameterTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TypeParameterTargetInfo typeParameterTargetInfo) |
void |
SimplifiedVisitor.visitTypeParameterTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterTargetInfo typeParameterTargetInfo) |
void |
SimplifiedVisitor.visitTypePathInfo(Clazz clazz,
Field field,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
void |
SimplifiedVisitor.visitTypePathInfo(Clazz clazz,
Member member,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo)
Visits the given TypePathInfo of any type of class member.
|
void |
SimplifiedVisitor.visitTypePathInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
void |
SimplifiedVisitor.visitTypePathInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
void |
SimplifiedVisitor.visitTypePathInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
| Modifier and Type | Method and Description |
|---|---|
void |
ClassPrinter.visitCatchTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
CatchTargetInfo catchTargetInfo) |
void |
ClassPrinter.visitEmptyTargetInfo(Clazz clazz,
Member member,
TypeAnnotation typeAnnotation,
EmptyTargetInfo emptyTargetInfo) |
void |
ClassPrinter.visitFormalParameterTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
FormalParameterTargetInfo formalParameterTargetInfo) |
void |
ClassPrinter.visitLocalVariableTargetElement(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo,
LocalVariableTargetElement localVariableTargetElement) |
void |
ClassPrinter.visitLocalVariableTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
LocalVariableTargetInfo localVariableTargetInfo) |
void |
ClassPrinter.visitOffsetTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
OffsetTargetInfo offsetTargetInfo) |
void |
ClassPrinter.visitSuperTypeTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
SuperTypeTargetInfo superTypeTargetInfo) |
void |
ClassPrinter.visitThrowsTargetInfo(Clazz clazz,
Method method,
TypeAnnotation typeAnnotation,
ThrowsTargetInfo throwsTargetInfo) |
void |
ClassPrinter.visitTypeAnnotation(Clazz clazz,
TypeAnnotation typeAnnotation) |
void |
ClassCleaner.visitTypeAnnotation(Clazz clazz,
TypeAnnotation typeAnnotation) |
void |
ClassPrinter.visitTypeArgumentTargetInfo(Clazz clazz,
Method method,
CodeAttribute codeAttribute,
TypeAnnotation typeAnnotation,
TypeArgumentTargetInfo typeArgumentTargetInfo) |
void |
ClassPrinter.visitTypeParameterBoundTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterBoundTargetInfo typeParameterBoundTargetInfo) |
void |
ClassPrinter.visitTypeParameterTargetInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypeParameterTargetInfo typeParameterTargetInfo) |
void |
ClassPrinter.visitTypePathInfo(Clazz clazz,
TypeAnnotation typeAnnotation,
TypePathInfo typePathInfo) |
Copyright © 2015. All Rights Reserved.