You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by Mikael Ståldal <mi...@magine.com> on 2016/10/20 12:18:50 UTC
StringMap implementation for implementors of custom ContextDataInjector
I am now trying to implement a custom ContextDataInjector.
This is a bit tricky since there is no implementation of StringMap
available for public use. I would like to use SortedArrayStringMap, but it
is marked with "*Consider this class private*".
How am I supposed to do?
--
[image: MagineTV]
*Mikael Ståldal*
Senior software developer
*Magine TV*
mikael.staldal@magine.com
Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.
Re: StringMap implementation for implementors of custom ContextDataInjector
Posted by Mikael Ståldal <mi...@magine.com>.
Ah, I missed ContextDataFactory. That's useful.
Yes, I was creating my own impl of StringMap in Scala, which was a bit
tricky due to the way it uses generics. But I managed to do it.
Scala uses generics similarly to Java, but there are some subtle
differences.
On Fri, Oct 21, 2016 at 1:53 AM, Remko Popma <re...@gmail.com> wrote:
> To get a StringMap instance, use this factory: https://github.com/
> apache/logging-log4j2/blob/master/log4j-core/src/main/
> java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
>
> About the use of generics: it makes things slightly harder if you want to
> create your own implementation of StringMap, is that your intention? If
> you're just using the interface you should be able to use Object anywhere
> for generic arguments or return types. Is this hard in Scala?
>
> Remko
>
>
> Sent from my iPhone
>
> On 20 Oct 2016, at 21:46, Mikael Ståldal <mi...@magine.com>
> wrote:
>
> I am also not at all happy with the fact that the getValue and forEach
> methods in StringMap are generic, that makes it tricky to implement in
> Scala. I think they should use Object as type of the value.
>
> On Thu, Oct 20, 2016 at 2:18 PM, Mikael Ståldal <mikael.staldal@magine.com
> > wrote:
>
>> I am now trying to implement a custom ContextDataInjector.
>>
>> This is a bit tricky since there is no implementation of StringMap
>> available for public use. I would like to use SortedArrayStringMap, but
>> it is marked with "*Consider this class private*".
>>
>> How am I supposed to do?
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@magine.com
>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>
>> Privileged and/or Confidential Information may be contained in this
>> message. If you are not the addressee indicated in this message
>> (or responsible for delivery of the message to such a person), you may
>> not copy or deliver this message to anyone. In such case,
>> you should destroy this message and kindly notify the sender by reply
>> email.
>>
>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@magine.com
> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>
>
--
[image: MagineTV]
*Mikael Ståldal*
Senior software developer
*Magine TV*
mikael.staldal@magine.com
Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.
Re: StringMap implementation for implementors of custom ContextDataInjector
Posted by Remko Popma <re...@gmail.com>.
To get a StringMap instance, use this factory: https://github.com/apache/logging-log4j2/blob/master/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
About the use of generics: it makes things slightly harder if you want to create your own implementation of StringMap, is that your intention? If you're just using the interface you should be able to use Object anywhere for generic arguments or return types. Is this hard in Scala?
Remko
Sent from my iPhone
> On 20 Oct 2016, at 21:46, Mikael Ståldal <mi...@magine.com> wrote:
>
> I am also not at all happy with the fact that the getValue and forEach methods in StringMap are generic, that makes it tricky to implement in Scala. I think they should use Object as type of the value.
>
>> On Thu, Oct 20, 2016 at 2:18 PM, Mikael Ståldal <mi...@magine.com> wrote:
>> I am now trying to implement a custom ContextDataInjector.
>>
>> This is a bit tricky since there is no implementation of StringMap available for public use. I would like to use SortedArrayStringMap, but it is marked with "Consider this class private".
>>
>> How am I supposed to do?
>>
>> --
>>
>>
>> Mikael Ståldal
>> Senior software developer
>>
>> Magine TV
>> mikael.staldal@magine.com
>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>
>> Privileged and/or Confidential Information may be contained in this message. If you are not the addressee indicated in this message
>> (or responsible for delivery of the message to such a person), you may not copy or deliver this message to anyone. In such case,
>> you should destroy this message and kindly notify the sender by reply email.
>
>
>
> --
>
>
> Mikael Ståldal
> Senior software developer
>
> Magine TV
> mikael.staldal@magine.com
> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>
> Privileged and/or Confidential Information may be contained in this message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply email.
Re: StringMap implementation for implementors of custom ContextDataInjector
Posted by Mikael Ståldal <mi...@magine.com>.
I raised that issue before, even though I did not know about the Scala
issue then:
https://issues.apache.org/jira/browse/LOG4J2-1447?focusedCommentId=15395455&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15395455
On Thu, Oct 20, 2016 at 2:46 PM, Mikael Ståldal <mi...@magine.com>
wrote:
> I am also not at all happy with the fact that the getValue and forEach
> methods in StringMap are generic, that makes it tricky to implement in
> Scala. I think they should use Object as type of the value.
>
> On Thu, Oct 20, 2016 at 2:18 PM, Mikael Ståldal <mikael.staldal@magine.com
> > wrote:
>
>> I am now trying to implement a custom ContextDataInjector.
>>
>> This is a bit tricky since there is no implementation of StringMap
>> available for public use. I would like to use SortedArrayStringMap, but
>> it is marked with "*Consider this class private*".
>>
>> How am I supposed to do?
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@magine.com
>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>
>> Privileged and/or Confidential Information may be contained in this
>> message. If you are not the addressee indicated in this message
>> (or responsible for delivery of the message to such a person), you may
>> not copy or deliver this message to anyone. In such case,
>> you should destroy this message and kindly notify the sender by reply
>> email.
>>
>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@magine.com
> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>
--
[image: MagineTV]
*Mikael Ståldal*
Senior software developer
*Magine TV*
mikael.staldal@magine.com
Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.
Re: StringMap implementation for implementors of custom ContextDataInjector
Posted by Gary Gregory <ga...@gmail.com>.
On Thu, Oct 20, 2016 at 10:26 AM, Mikael Ståldal <mi...@magine.com>
wrote:
> Yes, ReadOnlyStringMap. I don't think we should avoid generics, just use
> them in a proper and safe way. In a way which does not require
> @SuppressWarnings("unchecked").
>
WRT, @SuppressWarnings("unchecked"). that is a pipe dream IMO. I wish we
could make it so of course.
Gary
>
> On Thu, Oct 20, 2016 at 6:47 PM, Gary Gregory <ga...@gmail.com>
> wrote:
>
>> On Thu, Oct 20, 2016 at 5:46 AM, Mikael Ståldal <
>> mikael.staldal@magine.com> wrote:
>>
>>> I am also not at all happy with the fact that the getValue and forEach
>>> methods in StringMap are generic, that makes it tricky to implement in
>>> Scala. I think they should use Object as type of the value.
>>>
>>
>> You must mean ReadOnlyStringMap which StringMap inherits from. Generics
>> is a natural way to code in Java, I do not see avoiding this feature as a
>> reasonable path forward.
>>
>> Gary
>>
>>
>>>
>>> On Thu, Oct 20, 2016 at 2:18 PM, Mikael Ståldal <
>>> mikael.staldal@magine.com> wrote:
>>>
>>>> I am now trying to implement a custom ContextDataInjector.
>>>>
>>>> This is a bit tricky since there is no implementation of StringMap
>>>> available for public use. I would like to use SortedArrayStringMap,
>>>> but it is marked with "*Consider this class private*".
>>>>
>>>> How am I supposed to do?
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@magine.com
>>>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>>>
>>>> Privileged and/or Confidential Information may be contained in this
>>>> message. If you are not the addressee indicated in this message
>>>> (or responsible for delivery of the message to such a person), you may
>>>> not copy or deliver this message to anyone. In such case,
>>>> you should destroy this message and kindly notify the sender by reply
>>>> email.
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@magine.com
>>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>>
>>> Privileged and/or Confidential Information may be contained in this
>>> message. If you are not the addressee indicated in this message
>>> (or responsible for delivery of the message to such a person), you may
>>> not copy or deliver this message to anyone. In such case,
>>> you should destroy this message and kindly notify the sender by reply
>>> email.
>>>
>>
>>
>>
>> --
>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>> Java Persistence with Hibernate, Second Edition
>> <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
>>
>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
>> JUnit in Action, Second Edition
>> <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>
>>
>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
>> Spring Batch in Action
>> <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
>> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@magine.com
> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>
--
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
Spring Batch in Action
<https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory
Re: StringMap implementation for implementors of custom ContextDataInjector
Posted by Mikael Ståldal <mi...@magine.com>.
Yes, ReadOnlyStringMap. I don't think we should avoid generics, just use
them in a proper and safe way. In a way which does not require
@SuppressWarnings("unchecked").
On Thu, Oct 20, 2016 at 6:47 PM, Gary Gregory <ga...@gmail.com>
wrote:
> On Thu, Oct 20, 2016 at 5:46 AM, Mikael Ståldal <mikael.staldal@magine.com
> > wrote:
>
>> I am also not at all happy with the fact that the getValue and forEach
>> methods in StringMap are generic, that makes it tricky to implement in
>> Scala. I think they should use Object as type of the value.
>>
>
> You must mean ReadOnlyStringMap which StringMap inherits from. Generics is
> a natural way to code in Java, I do not see avoiding this feature as a
> reasonable path forward.
>
> Gary
>
>
>>
>> On Thu, Oct 20, 2016 at 2:18 PM, Mikael Ståldal <
>> mikael.staldal@magine.com> wrote:
>>
>>> I am now trying to implement a custom ContextDataInjector.
>>>
>>> This is a bit tricky since there is no implementation of StringMap
>>> available for public use. I would like to use SortedArrayStringMap, but
>>> it is marked with "*Consider this class private*".
>>>
>>> How am I supposed to do?
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@magine.com
>>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>>
>>> Privileged and/or Confidential Information may be contained in this
>>> message. If you are not the addressee indicated in this message
>>> (or responsible for delivery of the message to such a person), you may
>>> not copy or deliver this message to anyone. In such case,
>>> you should destroy this message and kindly notify the sender by reply
>>> email.
>>>
>>
>>
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@magine.com
>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>
>> Privileged and/or Confidential Information may be contained in this
>> message. If you are not the addressee indicated in this message
>> (or responsible for delivery of the message to such a person), you may
>> not copy or deliver this message to anyone. In such case,
>> you should destroy this message and kindly notify the sender by reply
>> email.
>>
>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> Java Persistence with Hibernate, Second Edition
> <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
>
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
> JUnit in Action, Second Edition
> <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>
>
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
> Spring Batch in Action
> <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>
--
[image: MagineTV]
*Mikael Ståldal*
Senior software developer
*Magine TV*
mikael.staldal@magine.com
Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.
Re: StringMap implementation for implementors of custom ContextDataInjector
Posted by Gary Gregory <ga...@gmail.com>.
On Thu, Oct 20, 2016 at 5:46 AM, Mikael Ståldal <mi...@magine.com>
wrote:
> I am also not at all happy with the fact that the getValue and forEach
> methods in StringMap are generic, that makes it tricky to implement in
> Scala. I think they should use Object as type of the value.
>
You must mean ReadOnlyStringMap which StringMap inherits from. Generics is
a natural way to code in Java, I do not see avoiding this feature as a
reasonable path forward.
Gary
>
> On Thu, Oct 20, 2016 at 2:18 PM, Mikael Ståldal <mikael.staldal@magine.com
> > wrote:
>
>> I am now trying to implement a custom ContextDataInjector.
>>
>> This is a bit tricky since there is no implementation of StringMap
>> available for public use. I would like to use SortedArrayStringMap, but
>> it is marked with "*Consider this class private*".
>>
>> How am I supposed to do?
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@magine.com
>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>>
>> Privileged and/or Confidential Information may be contained in this
>> message. If you are not the addressee indicated in this message
>> (or responsible for delivery of the message to such a person), you may
>> not copy or deliver this message to anyone. In such case,
>> you should destroy this message and kindly notify the sender by reply
>> email.
>>
>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@magine.com
> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>
--
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
Spring Batch in Action
<https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory
Re: StringMap implementation for implementors of custom ContextDataInjector
Posted by Mikael Ståldal <mi...@magine.com>.
I am also not at all happy with the fact that the getValue and forEach
methods in StringMap are generic, that makes it tricky to implement in
Scala. I think they should use Object as type of the value.
On Thu, Oct 20, 2016 at 2:18 PM, Mikael Ståldal <mi...@magine.com>
wrote:
> I am now trying to implement a custom ContextDataInjector.
>
> This is a bit tricky since there is no implementation of StringMap
> available for public use. I would like to use SortedArrayStringMap, but
> it is marked with "*Consider this class private*".
>
> How am I supposed to do?
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@magine.com
> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
>
> Privileged and/or Confidential Information may be contained in this
> message. If you are not the addressee indicated in this message
> (or responsible for delivery of the message to such a person), you may not
> copy or deliver this message to anyone. In such case,
> you should destroy this message and kindly notify the sender by reply
> email.
>
--
[image: MagineTV]
*Mikael Ståldal*
Senior software developer
*Magine TV*
mikael.staldal@magine.com
Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com
Privileged and/or Confidential Information may be contained in this
message. If you are not the addressee indicated in this message
(or responsible for delivery of the message to such a person), you may not
copy or deliver this message to anyone. In such case,
you should destroy this message and kindly notify the sender by reply
email.