Content-Type: multipart/related; start=; boundary=----------jikKz0FwQOsi5lfrzIb0mq Content-Location: http://es.answers.yahoo.com/question/index?qid=20080413185347AAIMl5R Subject: =?utf-8?Q?=C2=BFSera=20verdad=20lo=20que=20die=20el=20Talmud=20sobre=20Jesus=3F=20-=20Yahoo!=20Respuestas?= MIME-Version: 1.0 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline; filename=index.htm Content-Type: text/html; charset=utf-8; name=index.htm Content-ID: Content-Location: http://es.answers.yahoo.com/question/index?qid=20080413185347AAIMl5R Content-Transfer-Encoding: Quoted-Printable ¿Sera verdad lo que die el Talmud sobre Jesus? - Yahoo= ! Respuestas = =
= =

Opciones de c= uenta

Hola, IvanSalirAyuda
Search
= =
=
  1. Inicio >
  2. Todas las categor=C3=ADas >
  3. Socied= ad y cultura >
  4. Religi= =C3=B3n y espiritualidad >
  5. P= regunta resuelta
= = = =
=
=
3D"Gitanacool <= /a> Gitanacool La wapa = =
Miembro desde el
28 marzo 2008
Puntos totales:
30 (Nivel 1)
=

Pregunta resuelta

Ver otra »

=C2=BFSera verdad lo que die el Talm= ud sobre Jesus?

Jes=C3=BAs en el Talmud y espir= itualidad gentil
Claves: Justo, obras, acciones, conducta, mandamiento, creencia, fe, amo= r, respeto, Jes=C3=BAs, Ieshu, mesi=C3=A1nica, mes=C3=ADas, verdad, hist= oria, testimonio, nacimiento, precepto, profec=C3=ADa, Dios, religi=C3=B3= n, Midrash, Talmud, Rabino, rab=C3=ADnico, oral, Tor=C3=A1, estudio, b=C3= =ADblico, Biblia, Israel, israelita, hebreo, jud=C3=ADo, juda=C3=ADsmo,P= regunta:Profesor, lo saludo y le hago un par de preguntas: 1- =C2=BFCual= es son sus fuentes para afirmar la historia de la genealogia de Jesus (l= a historia sobre el romano Pantera...) y el hecho de que Jesus fuese exp= ulsado de la academia rab=C3=ADnica? 2- denjando por un rato de lado la = persistente obsesi=C3=B3n de los Cristianos por malinterpretar y deforma= r nuestra Torah, en que cree Ud. que ellos deber=C3=ADan creer ya que su= pongo que no propondr=C3=A1 que se conviertan al judaismo en masa, =C2=BF= no? Digo esto porque noto un importante desprecio de su parte a lo que e= llos creen. Estoy de acuerdo en que sus creencias son idolatr=C3=ADas co= ndenadas por la Torah pero... =C2=BFno deber=C3=ADan ellos creer en lo q= ue m=C3=A1s a bien les venga? 1- Principalmente el Talmud, que es el tes= timonio de testigos presenciales fieles y decentes, cuyo =C3=BAnico obje= tivo en la vida era servir con amor y reverencia al Eterno.
Jes=C3=BAs, el impostor y pecador, es un personaje mucho menos que secun= dario en el Talmud, de escaso inter=C3=A9s y nulo valor positivo. Por ta= nto, apenas si es mencionado en un contado n=C3=BAmero de brev=C3=ADsimo= s pasajes, dentro de la inmensidad enciclop=C3=A9dica que es el Talmud. =
En verdad, =C2=BFpara qu=C3=A9 desperdiciar tiempo, tinta y neuronas en = algo y alguien que no lo vale? Las fuentes talm=C3=BAdicas son: Sanhedr=C3= =ADn 43a, Sanhedr=C3=ADn 67a, Sanhedr=C3=ADn 107b, Sot=C3=A1 47a, Shabba= t 104b1. Es de apuntar que durante la fase de "fuego y espada"= de la "santa iglesia cristiana", en el medioevo, no solamente= se quemaron p=C3=BAblicamente ediciones enteras del Talmud (junto a est= udiosos del mismo), sino que adem=C3=A1s fueron censurados estos pasajes= reveladores de la verdadera identidad del profeta de la mentira y la di= scordia.
No fue esta m=C3=A1s que otra muestra del amor y tolerancia de los segui= dores del intolerante Jes=C3=BAs... En un aparte, =C2=BFcu=C3=A1les son = las fuentes de los que afirman un nacimiento m=C3=A1gico de Jes=C3=BAs? =
=C2=BFAcaso el tendencioso, plagado de errores y confabulado (que llaman= ) "Nuevo Testamento" es un testimonio veraz? 2- Los gentiles t= ienen sus propias obligaciones, derechos y responsabilidades frente al E= terno.
No est=C3=A1 en las religiones la vida espiritual de los gentiles, m=C3=A1= s bien todo lo contrario. El gentil que sigue alguna de las religiones, = lo =C3=BAnico que est=C3=A1 provocando es un vac=C3=ADo de verdadera esp= iritualidad en su vida, y sumiendo su esp=C3=ADritu en el abismo. El gen= til que cree lo que le viene en gana, como usted propone, es como el ni=C3= =B1o que poco ha aprendido de materias curriculares que decide inventar = su propia escuela, y dictar sus propios cursos a otros ni=C3=B1os, tan e= xtraviados y apartados de la raz=C3=B3n como su maestro.
Tampoco el camino para el gentil es el de la conversi=C3=B3n al juda=C3=AD= smo. El camino del gentil es el de la fidelidad al Eterno, por medio de = una vida de plenitud en base al cumplimiento de los preceptos universale= s, que el Todopoderoso les ha conferido para que cumplan.
Siga estos dos enlaces para enterarse de m=C3=A1s:
Fieles.
Preceptos Universales.
Si le quedan dudas, h=C3=A1galas saber.
"=C2=A1Bendito el que viene en el nombre del Eterno!" (Tehilim= / Salmos 118:26)
Iebarejej=C3=A1 H' - Dios te bendiga, y que sepamos construir Shalo= m
Notas:
1- En un breve resumen: su madre que se llamaba Miriam, era peluquera de= lejano parentesco con la familia Jasmonea, (en el poder en aquel moment= o, pues el verdadero Jes=C3=BAs naci=C3=B3 aproximadamente 100 a=C3=B1os= antes del supuesto nacimiento del Jes=C3=BAs adorado como falso dios), = y estaba casada con un hombre al que apodaban Stada (Tosefta Jul=C3=ADn = 2:24; Avod=C3=A1 Zar=C3=A1 17a; Or=C3=ADgenes, Contra Celso 1.28). Era a= d=C3=BAltera, en particular con un romano que se llamaba Pantera, con qu= ien concibi=C3=B3 a su peque=C3=B1o bastardo Jes=C3=BAs (Sanedr=C3=ADn 6= 7a); Ieshu ben Pantera tuvo diferentes acciones perversas e inmorales, p= or las cuales termin=C3=B3 expulsado de las academias sin haber avanzado= mucho en sus estudios (Sot=C3=A1 47a, Avod=C3=A1 Zar=C3=A117a). En una = estad=C3=ADa en Egipto (Sanedr=C3=ADn 107b) aprendi=C3=B3 las oscuras ar= tes de magos y brujos, por lo que pod=C3=ADa hacer trucos y actos aparen= temente milagrosos, tal como los brujos de anta=C3=B1o sab=C3=ADan. En s= us andanzas se relacion=C3=B3 con gobernantes y funcionarios, pero se re= bel=C3=B3 y fue ejecutado un d=C3=ADa antes de la Pascua (Sanedr=C3=ADn = 43a); y tuvo varios disc=C3=ADpulos, algunos de los cuales fueron a su v= ez ejecutados (Sanedr=C3=ADn 43a).
=
3D"NEPTALI by NEPTALI B = =
Miembro desde el
25 septiembre 2007
Puntos totales:
133 (Nivel 1)
=

Mejor respuesta - E= legida por la comunidad

Eso lo que dice el = talmud es verdad, pero este yeshu ben pantera,no es el rabino yehoshua b= en josef al cual los cristianos llaman jesus. este yeshu ben pantera exi= stio 100 a=C3=B1os antes del rabino yehoshua ben josef.
YESHU BEN PANDERA: Este Jesus fue apedreado hasta la muerte y luego colg= ado en un =C3=A1rbol por traici=C3=B3n y brujeria en la vispera de Pesaj= bajo el reinado de Alejandro Janeo (106-79 a.e.c.). Esto ocurrio en Jer= usalem 100 anos antes de haber nacido(yehoshua ben yosef)al cual los cri= stianos conocen como Jesus. Yeshu Ben Pandera tuvo cinco discipulos: Ma= ttai, Naqui, Neitzer, Buni y Todah. Algunos opinan que el discipulo cris= tiano Mateo haya sido inventado de este Mattai. pero tambien hubo otro h= ombre.
YESHU BEN STADA: Este Yeshu vivi=C3=B3 en el segundo siglo e.c., cien a=C3= =B1os despues de Jesus haber nacido.
Este tambi=C3=A9n fue apedreado y colgado por traici=C3=B3n y brujeria e= n la vispera de Pesaj, pero no en Jerusalem, sino en Lidia.
A decir verdad, los escritores del Talmud nunca se refirieron(al rabino= yehoshua ben yosef) llamado por los cristianos,Jesus de Nazareth. expl= icitamente, aunque en dos escritos de la Mishn=C3=A1h -Tosefta y Baraita= - encontramos una referencia a dos diferentes hombres que muchos jud=C3=AD= os constantemente confunden con Jesus. por desconocer la verdadera histo= ria. uno de nuestros sabios opino lo siguiente: RABBAI MOSHE.- Creo que = existi=C3=B3 una persona diferente a la que el mundo conoce como Jesus; = el jud=C3=ADo al que me refiero se ha conocido como Yahoshuah BenYossef,= un maestro de la Torah, al que muchos judios consideran un profeta, per= o que muy poco se conoce de la vida real de este hombre, ya que no conta= mos con un documento fidedigno que nos hable ciertamente de el y de su f= amilia, asi como de lo que el realiz=C3=B3 mientras vivi=C3=B3.
Lo que se conoce de el difiere mucho de lo que los evangelistas han desc= rito de Jesus. No por ello debemos aceptar cualquier mentira que nos ven= ga a cambiar la verdadera historia, asi esta venga de boca de un judio, = porque escrito esta que no debemos poner tropiezo al ciego y uno de los = mandamientos nos exhorta claramente a no mentir, asi sea para favorecer = a nuestra sagrada Torah o a nuestro pueblo.creo que esta claro este asun= to pero les dire algoporque los judios ortodoxos no creen que Yehoshua(c= risto) es el Mes=C3=ADas?, ellos dicen que Yehoshua no es el Mes=C3=ADas= por lo de su genealog=C3=ADa;
te presento la genealog=C3=ADa de los dos evangelios:
Mateo --------- Lucas=
1 Abraham -------- Abraham 2 Isaac ------ Isaac<= br> 3 Jacob------ Jacob=
4 Jud=C3=A1 ------ = Jud=C3=A1
5 Fares ------ Fare= s
6 Hesr=C3=B3n ------ H= esr=C3=B3n
7 Aram***------ Arn=C3=AD**= * Aqu=C3=AD Lucas cambia el nombre de Aram en Mateo por = Arni...?
8 Aminadab ------ Admin. *** Aq= u=C3=AD Lucas agrega una generaci=C3=B3n...? (no se entiende!!!)
9 Najs=C3=B3n ------ Aminada= b
10 Salm=C3=B3n------ Najs=C3= =B3n
11 Boaz------ Sal=C3=A1= En Mateo dice Salm=C3=B3n y en Lucas Sal=C3=A1
12 Obed------ Boaz=
13 Isa=C3=AD------ = Obed
14 David------ = Isa=C3=AD
15 Salom=C3=B3n***------ Da= vid
16 Roboam------ Nat=C3=A1n *= ** Mateo dice que desciende del Rey Salom=C3=B3n y Lucas de Nat=C3=A1n<= br> 17 Ab=C3=ADas------ Mat= ata
18 Asa------ Ma= in=C3=A1n
19 Josafat------- -- Melea 20 Joram------ El= iaquim
21 Uz=C3=ADas----- = Jon=C3=A1n
22 Jotam------ = Jos=C3=A9
23 Acaz------ = Jud=C3=A1
24 Ezequ=C3=ADas;------ = Sime=C3=B3n
25 Manas=C3=A9s------ = Lev=C3=AD
26 Am=C3=B3n------ = Matat
27 Jos=C3=ADas *** = Jorim ***1 Cr=C3=B3nicas 3:15 Los hijos de Jos=C3=ADas fueron: J= ohanan el primog=C3=A9nito, el segundo Joacim (Mateo le cambia el nombre= ), el tercero Sedequ=C3=ADas, el cuarto Salum.
28 Jeconias***------ Eli=C3= =A9cer ***Aqui al rey "Joacim, (lea; jerem=C3=ADas 22:24) (o Joa= kim) Mateo lo pronuncia como Jeconias.
29 Salatiel------ = Josu=C3=A9
30 Zorobabel------ = Er
31 Abiud------ = Elmodam
32 Eliaquim------ = Cosam
33 Azor------ = Adi
34 Sadoc------ = Melqui
35 Aquim------ = Neri
36 Eliud---- = Salatiel
37 Eleazar****--- = Zorobabel
38 Mat=C3=A1n---- = Resa
39 Jacob****--- = Joan=C3=A1n
40 Jos=C3=A9...? - = Jud=C3=A1 Mateo dice: "marido de Mar=C3=ADa de l= a cual naci=C3=B3 Jes=C3=BAs"*****
Jos=C3=A9, es el padre, o no...?
42 Jes=C3=BAs... = Jos=C3=A9
43no hay?------ = Semei ----------------------------------------= =E2=80=A6
44no hay?------- = Matat=C3=ADas
45no hay?------- = Maat
46no hay?--- = Nagai
47no hay?--- = Esli
48 no hay?--- = Nahum
49no hay?-- = Am=C3=B3s
50no hay?--- = Matat=C3=ADas
51no hay?-- = Jos=C3=A9
52no hay?-- = Jana
53no hay?--- = Melqui
54no hay?-- = Lev=C3=AD**** Eleazar es el nombre que da Mateo = diferencia total
55no hay?--- Matat Mat=C3=A1= n es el nombre dado por Mateo difiere poco
56no hay?--- El=C3=AD= **** Otra diferencia en Mateo es Jacob****
57no hay?--- Jos=C3=A9 Jose = es hijo de Eli para Lucas ****y de Jacob para Mateo.****
58no hay?-- Jes=C3=BAs Lucas dice as=C3=AD= :"El era (seg=C3=BAn se cre=C3=ADa) hijo de Jos=C3=A9"
Hay 15 o 16 generaciones de diferencia, como se explica...?
PORQUE ESTOS ERRORES???
PORQUE ESTAS INCONSISTENCIAS ENTRE ESTOS DOS EVANGELIOS? SI ESTAN HABLAN= DO DEL MISMO SE=C3=91OR.ALGUNOS JUDIOS DICEN QUE YEHOSHUA (Jesucristo) N= O PODRIA SER EL MESIAS PORQUE VIENE DE LA LINEA DE JOACIM Y DIOS LO MALD= IJO.
La maldici=C3=B3n esta en jerem=C3=ADas 22:30 y es una triple maldici=C3= =B3n. Observa:
1) No tendr=C3=A1 descendencia.
2) nunca prosperar=C3=ADa
3) ning=C3=BAn descendiente. De el lograr=C3=ADa sentarse en el trono de= David y ser el rey de los jud=C3=ADos.Como podr=C3=ADa ser el Jes=C3=BA= s cristiano el Mes=C3=ADas de Israel con tremenda maldici=C3=B3n encima.=
POR OTRO LADO QUIERO QUE EL DIA DE HOY TE ENTERES QUE TANTO SALOMON COM= O NATAN ERAN HIJOS DEL REY DAVID.MATEO DICE QUE JESUCRISTO VENIA POR EL = LINAJE DE SALOMON. LUCAS DICE QUE ES POR LA VIA DE NATAN?.
O ERA POR SALOMON? O ERA POR NATAN? PERO NUNCA PODRIA VENIR POR AMBOS. = SALOMON Y NATAN ERAN HIJOS DE DAVID CON LA QUE FUE LA MUJER DE URIAS. = PERO ESTO NO ES TODO HAY MAS.
OBSERVA NUEVAMENTE EL LINAJE DE JESUS
MATEO DICE QUE JOSE EL ESPOSO DE MARIA ERA HIJO DE JACOB. (MATEO 1:16).<= br> PERO LUCAS DICE QUE JOSE ERA HIJO DE ELI
(LUCAS 3:23)
O ERA HIJO DE JACOB? O ERA HIJO DE ELI?
PERO NO PODRIA SER HIJO DE AMBOS? ENTIENDES LO QUE DIGO.los judios creer= an en jesus cuando los cristianos esten preparados para dar repuestas a = estas interrogantes?por mi parte tengo las repuestas si alguien esta int= eresado.mi correo es: elangelqllora@hotmail.com soy judio y conozco la h= istoria y las tradiciones de mi pueblo.y conozco toda clase de argumento= s que han levantado para manchar la imagen del Rabi. pero cada vez que s= acan un argumento en su contra la verdad lo destruye y la imagen de el R= abino yehoshu
33% 2 votos
=
  • 0 Puntuaci=C3=B3n: Respuesta correcta
  • 0 Puntuaci=C3=B3= n: Respuesta incorrecta
= =

Todav=C3=ADa no hay comentarios en esta preg= unta.

=

Otras respuestas (6)

=
  • =
    3D"rene" by rene = =
    Miembro desde el
    26 abril 2007
    Puntos totales:
    3.199 (Nivel 4)
    =
    Tu no eres Jud=C3=ADa.!!!
    TALMUD.Libro santo de los jud=C3=ADos que contiene las ense=C3=B1anzas d= e los antiguos Doctores de la ley.
    Colecci=C3=B3n de tradiciones Rab=C3=ADnicas que interpreta la Ley de Mo= is=C3=A9s en dos libros:El Talmud de Jerusal=C3=A9n o Mishna(codificaci=C3= =B3n de las tradiciones orales), el Talmud de Babilonia o Guemara(su c= omentario).
    Que f=C3=A1cil sacar el texto de alguna pagina de la Red, (tal cual), lo= transcribiste igual, y se nota, (pobrecita), que ni idea tienes de lo q= ue escribiste.No eres Jud=C3=ADa, porque ellos no se dedican a atacar a = religi=C3=B3n o creencia.Tengo cientos de amigos de la comunidad Jud=C3=AD= a, ortodoxos, mesi=C3=A1nicos,etc., jam=C3=A1s abordan el punto. As=C3=AD= que mejor estudia algo que comprendas.No escribas algo para que la com= unidad YR, crea que sabes, eres ignorante al 100%.
    Mesi=C3=A1nico : Relativo al Mes=C3=ADas o al mesianismo: las tradicione= s Mesi=C3=A1nicas permanecieron siempre muy vivas entre los jud=C3=ADos.=
    No soy erudita en el tema, pero tengo cerca de mi a un amigo, lleg=C3=B3= hace dos meses de una Yashiva (en Israel), estudio precisamente para Ra= bino, y el te puede explicar palabra por palabra el texto que transcribi= ste, a lo tonto. Sabes!!!, me asusta la ignorancia, en esto no entran la= s creencias, s=C3=B3lo la est=C3=BAp...idez
    17% 1 Voto
    =
    • 2 Puntuaci=C3=B3n: Respuesta correcta
    • 0 Puntuaci=C3=B3= n: Respuesta incorrecta
  • =
    3D"AlmaRebelde" by AlmaRebe... = =
    Miembro desde el
    29 marzo 2008
    Puntos totales:
    14 (Nivel 1)
    =
    Creo que esos textos se metieron desp= u=C3=A9s de Cristo, con =C3=A1nimo de desprestigiar a una religi=C3=B3n = competidora.
    17% 1 Voto
    =
    • 2 Puntuaci=C3=B3n: Respuesta correcta
    • 4 Puntuaci=C3=B3= n: Respuesta incorrecta
  • =
    3D"Dawson" by Dawson = =
    Miembro desde el
    04 abril 2008
    Puntos totales:
    2.178 (Nivel 3)
    =
    Al final de los tiempos ya no habra e= stos conflictos. Por que los Judios reconoceran a Cristo.
    Esto parece incleible, pero sera como un milagro.
    Sera una de las grandes se=C3=B1ales del fin del mundo.
    Cristianos y Judios ser=C3=A1n una misma Religion.

    "respetemos a nuestros hermanos mayores, los Judios"
    Juan Pablo II
    0% 0 votos
    =
    • 2 Puntuaci=C3=B3n: Respuesta correcta
    • 3 Puntuaci=C3=B3= n: Respuesta incorrecta
  • =
    3D"Kike_Ateo" by Kike_Ate... = =
    Miembro desde el
    09 marzo 2008
    Puntos totales:
    2.019 (Nivel 3)
    =
    el clasico copy paste porq no piensan= mejor en sus preguntas

    saludos
    17% 1 Voto
    =
    • 4 Puntuaci=C3=B3n: Respuesta correcta
    • 1 Puntuaci=C3=B3= n: Respuesta incorrecta
  • =
    3D"=E3=81=82=E3=82=8B=E3=81=A8= by =E3= =81=82=E3=82=8B=E3=81=A8=E3=81=85=E3=82=8D = =
    Miembro desde el
    28 marzo 2008
    Puntos totales:
    1.236 (Nivel 3)
    =
    veras yo no puedo cuestionar tus opin= iones pues al igual que tu tambien soy un pecador pero solo te dejara al= gunas cosas que Jesus dijo al estar en la tierra
    "bienaventurados aquellos que creen en mi sin conocerme pues de ell= os sera el reino de los cielos"
    "nadie llega al padre sin por mi"
    "nadie es profeta en su tierra"
    0% 0 votos
    =
    • 0 Puntuaci=C3=B3n: Respuesta correcta
    • 0 Puntuaci=C3=B3= n: Respuesta incorrecta
  • =
    3D"Manuel by Manuel H = =
    Miembro desde el
    25 agosto 2007
    Puntos totales:
    8.681 (Nivel 5)
    =
    El Talmud es un libro escrito por rab= =C3=ADes jud=C3=ADos ense=C3=B1a solo tradiciones y creencias humanas de= ellos mismos.


    =C2=BFY para que nos puede servir la lectura del Talmud? Se sabe que los= originadores de esta obra (siglo III) fueron los fariseos descendientes= de los fariseos que mandaron matar a Jes=C3=BAs, =C2=BFqu=C3=A9 mas les= quedaba mas que defender sus puntos de vista y repet=C3=ADrselos ellos = mismos a manera de hipnosis?

    Su razonamiento nada fiel indicaba una mente agn=C3=B3stica, prejuiciosa= y convenenciera. Se lee en el Talmud: " Es mejor eliminar una ley,= que olvidar toda la Tor=C3=A1" =C2=BFY por que dijeron =C3=A9sto? = Con tal de no darle nada a los jud=C3=ADos humildes que por ley estaban = obligados a ayudar. =C2=A1Que chavos tan listos!


    Ahora, =C2=BFa cual de los Talmudes se refiere usted?

    Fuente(s):

    Cuando pueda lea.

    A Commentary on the New Testament From the Talmud and Hebraica. De John = Lightfoot. Donde trata la manera de pensar de los fariseos, que coincide= con lo que see en la Biblia.
    17% 1 Voto
    =
    • 2 Puntuaci=C3=B3n: Respuesta correcta
    • 1 Puntuaci=C3=B3= n: Respuesta incorrecta
  • =
    =
    <= !-- http://uk.ard.yahoo.com/SIG=3D160jkm9ld/M=3D200091354.201967661.2032= 51562.201466007/D=3Des_know/S=3D2115314573:LREC/Y=3DES/EXP=3D1291251294/= L=3DAww80EWTZOPArPiDTOIdmATMyXyK7Ez20j4AAG_7/B=3DnJiQPEwNB4k-/J=3D129124= 4094483072/K=3Dmk4cwBVpcfURgVmP5YOUGw/A=3D200727529/R=3D0/* -->
    PUBLICIDAD
    = = = = = = = =

    =C2=BFQui=C3=A9n la = ha destacado?

    =C2=A1S=C3=A9 el primero en destacar esta pregunta= !

    = =
    = =
    ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline; filename=answers_favicon.ico Content-Type: image/x-icon; name=answers_favicon.ico Content-Location: http://l.yimg.com/a/i/us/sch/gr/answers_favicon.ico Content-Transfer-Encoding: Base64 AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABML AAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAOiT5ADok+vw6JPt8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAA6JPkAOiT6/Dok+/w6JPv8OiT6fAAAAAAAAAAAAAAAAAAAAAAAA AAAOiT4QDok+UA6JPoAOiT6ADok+gA6JPr8OiT7/FZpJ/yCzWv8OiT7/Dok+rw6J PlAOiT4QAAAAAAAAAAAOiT4wDok+7w6JPv8Vmkn/FZpJ/xWaSf8Xnkz/JLtg/yvM a/8mv2P/FZpJ/xWaSf8OiT7/Dok+7w6JPjAAAAAADok+3xWaSf8pyGj/K8xr/yvM a/8rzGv/K8xr/xumUv8Vmkn/K8xr/yvMa/8rzGv/Kcho/xOWRv8OiT7fAAAAAA6J Pv8ku2D/K8xr/yvMa/8nxGX/K8xr/2DZkP//////isyk/yvMa/8rzGv/J8Rl/yvM a/8ku2D/Dok+/wAAAAAOiT7/JLtg/yvMa/82y3H/Wa56/xeeTP82y3H//////47V qv8pyGj/SLx2/1muev8ku2D/JLtg/w6JPv8AAAAADok+/yS7YP8rzGv/sOzI//// //+02sP/H5VN//////97xZj/e8WY//D48//w+PP/Mb5p/yS7YP8OiT7/AAAAAA6J Pv8ku2D/K8xr/1PWh/+w7Mj///////D48///////4fDn///////K8tr/e9+j/yvM a/8ku2D/Dok+/wAAAAAOiT7/JLtg/yvMa/8rzGv/Irdd/0Kwbf/w+PP///////// //+l07f/FZpJ/yCzWv8rzGv/JLtg/w6JPv8AAAAADok+/yS7YP8rzGv/WciF/8Pi z///////5fnt///////S6dv//////+Hw5/93vZL/LbZj/yS7YP8OiT7/AAAAAA6J Pv8ku2D/K8xr/6Lpvv//////oum+/zjPdP//////jtWq/23cmf/y/Pb/5fnt/zjP dP8ku2D/Dok+/wAAAAAOiT7/JLtg/yvMa/84z3T/YNmQ/yvMa/9G0n7//////4fE n/8rzGv/OM90/2DZkP8rzGv/JLtg/w6JPv8AAAAADok+/yK3Xf8rzGv/K8xr/yvM a/8rzGv/YNmQ//////+R3a//K8xr/yvMa/8rzGv/K8xr/yK3Xf8OiT7/AAAAAA6J Pr8QjUH/ILNa/yfEZf8rzGv/K8xr/yvMa/8rzGv/K8xr/yvMa/8rzGv/J8Rl/yCz Wv8QjUH/Dok+vwAAAAAOiT4QDok+nw6JPv8OiT7/Dok+/w6JPv8OiT7/Dok+/w6J Pv8OiT7/Dok+/w6JPv8OiT7/Dok+nw6JPhAAAAAA/8+YAP8PAADgDwAAgAMAAAAB AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAgAMAAA== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/bullets.gif Content-Transfer-Encoding: Base64 R0lGODlhFAcNAMQUAH+xUDMzM/X19bi4uJmZmeDg4IKyT4WFhXBwcGZmZn6yTf// /4+Pj6Ojo+vr69bW1q2trYSwT3p6esLCwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAABQALAAAAAAUBw0AAAX/ICWOZGmeaKqubOu+cCzP dG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrN brvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnIoA naBPCqGkRgIEBQUEpaxGBKutsUEOCQ8IEAuyukkBAbu/PwbAwzifxMctAxKnsMjO Kq+vz9MpCxMJBQEO1Nwwvb3d4SPGESKj4t3G6MgHDQ4IE+vP0c3yzgIIDA0J9v3f vv2mCfukLuAvAAgTGvw1IMGpAwuHSYs4bIGAAAUSNKAoDhzHYwo/AisoEhS+AQ+w T5VcydLQggMEGm5rSbOmI5I2OwnLqQkCg5cDeAod+kbAxgYCchFdyrSpUx84nzIS MEBAgaBSs2rdyrWr169gw4odS7as2bNo06pdy7atkRAAOw== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/cta-darkblue.gif Content-Transfer-Encoding: Base64 R0lGODlhkAHPAMQAAC+VyCySxSiOwSWLviGHuh6EtxqAsxd9sBN5rBB2qQxypQlv ogVrngNpmwJomwFnmgBmmf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEHABEALAAAAACQAc8AAAX/YPOMZGmeaKqubOu+cCzP dG3feK7v/A38wKBwSCwaj8ikcslsOp/QqHRKrVqv2CgEEuh6v+CweEwum8/otHrN brvf8Lh8Tq/b31uBfs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk4wODgOYmZqbnJ2e n6ChoqOkpaanqKmqq6ytrq+wsapbBLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3O x1sF0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvkWwbv8PHy8/T19vf4+fr7/P3+ /wADChxIsKDBgwgDbjnAsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTHLQhS /6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwrduSWB0aNIkypdyrSp06dQo0qd SrWq1atYs2rdyrWr169YtygYS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7fu lgWAAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM0vewqCz58+gQ4seTbq06dOo U6tezbq169ewY8ueTbu27ddbLOnezbu379/AgwsfTry48ePIkytfzry58+fQo0tv vqW69evYs2vfzr279+/gw4sfT768+fPo06tfz769+/fw48ufT7++/fv48+vfz7+/ //8ABijggAQWaOCBCCao4P+CDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKI JJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap 5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptw xinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrp pZhmqummnHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGKuustNZq66245qrrrrz2 6uuvwAYr7LDEFmvsscgmq+yyzDbr7LPQRivttNRWa+2mtdhmq+223Hbr7bfghivu uOSWa+656Kar7rrstuvuu/DGK++89NZr77345qvvvvz26++/AAcs8MAEF2zwwQgn rPDCDDfs8MMQRyzxxBRXbPHFGGes8cYcd+zxxyCHLPLIJJds8skop6zyyiy37PLL MMcs88w012zzzTjnrPPOPPfs889ABy300EQXbfTRSCet9NJMN+3001BHLfXUVFdt 9dVYZ31nCAA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/cta-gray.gif Content-Transfer-Encoding: Base64 R0lGODlhkAHPALMAAPPz8+/v7+rq6ubm5uLi4t7e3tra2tbW1tLS0s7OzsrKysXF xcHBwb29vbm5uf///yH5BAEHAA8ALAAAAACQAc8AAAT/0MlJq7046827/2AojmRp nmiqrifgvnAsz3Rt33iu73zv/8CgcEgsGo9ACXLJbDqf0Kh0So0qq9isdsvter82 SWBMLpvP6LR6zW673/C4fE6v2+/4vH7Pr4v7gIGCg4SFhoeIiYUSAo2Oj5CRkpOU lZaXmJmam5ydnp+goaKjpKWmnxIDqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsO8 EgTHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4NkSBeTH5OfnBOjqyOno7wXq7vHw 8vTz9ffy+/D96/fu7PlLJ7CcQXrsBBYs6E9hOXsJ9Q3Ed/CduXgX8wFcx+/fxIoZ /0EebMdOY8OOGy3WK7mRpcqPGFUu3GfO3jhyBgrk3Ikz5zkDPHv6xEkUHVCgOoMi /Zm0p86nO5H6jGp0qdKBVvtZPTpUaNWiQ6OKnVp1qVOyT39KhUe1KdGuQrmSPaqW 6VawPNvG3cq1qNuzcKcGTSoVrdmmcMEarYuWrVjEXc3ylCC3suXLmDNr3sy5s+fP oEOLHk26tOnTqFOrXg1UwoHXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyINL QMC8ufPn0KNLn069uvXr2LNr3869u/fv4MOLH0++vHcJCdKrX8++vfv38OPLn0+/ vv37+PPr38+/v///AAYo4P9+Eihg4IEIJqjgggw26OCDEEYo4YQUVmjhhRhmqOGG HHbo4YcYSrDAiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjzWKAEDQAYp 5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGb55AIMLPCjlmCGKeaYZJZp5plo plmmBA206eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWauifbL6ZKJuMOhDn BG06CqekjDbQqKWWWpApppFWWqejkroJqqKZggrpnJRGOmkFk6o6aqihilqqrJ2q SiumlY5KKq614gorq7pS+uulq276KQW+NqprsZy6yqn/qdCK+mq0yi7Kq6LCNuup raQqy6uw0LIg7rjklmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAH LPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJ KKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft 9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x0 12333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ675 5Oacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/A By/88MQXb/zxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv/vjkl2/+ +einr/767Lfv/vvwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfI wAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrw hTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiBqLAAA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/cta-gray-hover.gif Content-Transfer-Encoding: Base64 R0lGODlhkAHPALMAAOfn59/f39fX187OzsbGxsLCwrq6urKysq6urqampqKiopqa mpKSko6OjoaGhgAAACH5BAAHAP8ALAAAAACQAc8AAAT/0MlJq7046827/2AojmRp nmiqrifgvnAsz3Rt33iu73zv/8CgcEgsGo9ACXLJbDqf0Kh0So0qq9isdsvter82 SWBMLpvP6LR6zW673/C4fE6v2+/4vH7Pr4v7gIGCg4SFhoeIiYUSAo2Oj5CRkpOU lZaXmJmam5ydnp+goaKjpKWmnxIDqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsO8 EgTHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4NkSBeTH5OfnBOjqyOno7wXq7vHw 8vTz9ffy+/D96/fu7PlLJ7CcQXrsBBYs6E9hOXsJ9Q3Ed/CduXgX8wFcx+/fxIoZ /0EebMdOY8OOGy3WK7mRpcqPGFUu3GfO3jhyBgrk3Ikz5zkDPHv6xEkUHVCgOoMi /Zm0p86nO5H6jGp0qdKBVvtZPTpUaNWiQ6OKnVp1qVOyT39KhUe1KdGuQrmSPaqW 6VawPNvG3cq1qNuzcKcGTSoVrdmmcMEarYuWrVjEXc3ylCC3suXLmDNr3sy5s+fP oEOLHk26tOnTqFOrXg1UwoHXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyINL QMC8ufPn0KNLn069uvXr2LNr3869u/fv4MOLH0++vHcJCdKrX8++vfv38OPLn0+/ vv37+PPr38+/v///AAYo4P9+Eihg4IEIJqjgggw26OCDEEYo4YQUVmjhhRhmqOGG HHbo4YcYSrDAiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjzWKAEDQAYp 5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGb55AIMLPCjlmCGKeaYZJZp5plo plmmBA206eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWauifbL6ZKJuMOhDn BG06CqekjDbQqKWWWpApppFWWqejkroJqqKZggrpnJRGOmkFk6o6aqihilqqrJ2q SiumlY5KKq614gorq7pS+uulq276KQW+NqprsZy6yqn/qdCK+mq0yi7Kq6LCNuup raQqy6uw0LIg7rjklmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAH LPDABBds8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJ KKes8sost+zyyzDHLPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft 9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x0 12333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ675 5Oacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/A By/88MQXb/zxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv/vjkl2/+ +einr/767Lfv/vvwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfI wAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrw hTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiBqLAAA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/a/i/nt/ic/ut/bsc/bud12_1.gif Content-Transfer-Encoding: Base64 R0lGODlhDAAMANUtAEmZwSKFtlWexWqqy3Ovz2ClyS6Kum6szBl+s0SVwGqpy2+s zGGlyDyRviKEtiuJuUmZwlCbwjmQvDKNu1WgxVafxRuBtCCDtiGEtlWfxUmYwRd/ s1aexTaOuhyBtGOmyVSdxHawzzuSvTiQvDONvHexz0+bwy+LujuRvarS5xt/tABw qAhnmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAC0ALAAAAAAMAAwAAAZcwJawdVqtTsMkqpT6RFBJ 4So1oExW0dZqURlZsNFTQuLZILIEhHFFiKpUqcOhs1INBSFqIQNokOwtcAoMHAAi Bg8sQnAFAhAoBg4BioEgJhooJxgXk0Isn6ChLUEAOw== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/question-bg-top.gif Content-Transfer-Encoding: Base64 R0lGODlhGQByAKIAAPz/+PX98PD76/j99u765v///wAAAAAAACH5BAAAAAAALAAA AAAZAHIAAAP/SLrc/jDKSau9OOvNu/9gKI5kaZ4oKAjKSrgvC7vwt954ructG/+/ mezW2xlxRZ9S2Wslj9CodEqtWq/YaSCw2gq8Xy4YHO5yv+au2bsdn9/vNPrmLpfr bbjarp/L2XpucHmEhYaHiImKiWGLjo+QkYYDA1uUAZeYlZmXlJyVmJago6OShJ2e qaqrqm2flqKwmqKstba3uLm6u7y9vr/AwcK9AMXGx8jJxcOex5TLAwDP0tHTz6nQ y9nS283K3+Dh4uPk5ebFBQXo6unrAO3v7Orn3/D27u/48/ry7vby/9Dp4zcvoMGC ANMpXMiwocOHECNKnEixosWLGDNq3MixHKPHjyBDihxJsqTJkyhTqlzJsqXLlzBj ypwZMQEAOw== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/border-x-grey.gif Content-Transfer-Encoding: Base64 R0lGODlhAwABAIABAMzMzP///yH5BAEAAAEALAAAAAADAAEAAAICRFIAOw== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/intl-flags.gif Content-Transfer-Encoding: Base64 R0lGODlhEQCzB+Z/AFfQ7tbkTlqhsjMx0OcrLVxhr2OD5S/IL4QCBJ7hGfxDQvHw kFy+rvzQBqbapv2ChLTS6Jvock1OxPz+/Lq5u5cgYNnY2Ojd3PxbBJSipQIBAkrL S+SurUO4a6Oio3LPe6OuZOTy/DmPlyS+VNTS9GpKTOWZZATOBPxsbodwcx51q2Zt 5s7w1fwVFSAzqm54xfyWBIPTjNRRUndyc0pN5omIioG4ycLFwvz7zFnBd1pbboaQ 3Lyi1LxerxRS/JfjjvwnBDQ0+vbz9ltp79bg65vCzAwKa1HdBLW15nzOqSfTBOq2 tYNaW9UTFWvbYdLGyJyelTTW/Py+vPz+L/7g4LBISuz2JOTnLfzuBKytv/yenPzu 7F14aRQSzPzl7Pzd3PjMyZya5HRiVPyurIx9TNSSlLzm/E80g4SCn5yahMzS1Cws LFknpMQaRAQS7Awu9Mj0BFdd1dwKJLycnGZYw6yqLLrdvD69UvH2+eTGxMyewMjC pILed+SGhPwCBAAAACH5BAEAAH8ALAAAAAARALMHAAf/gH+Cg4SFhoeIiYqLjI2O j5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusohN4EBA2RRAhE4cTREUCSUkM IgJFeLeDuUkxyD8/SQIqNkKEREkRH9V8fMsiKkWERTE/OR9OEeTZAoQ2ATnh5HxO 2L+EDAEdHXwRTht3Hz8MKoQCpsTI8W5Dh3Ux/KELsEDcuw/rfIkgBIHBlAj3MHb4 kERFBkJ4bMSIoIxcLxEiiBCaEMIGAwa9mAGzQKxYiFizbNjIQKRmq59AgwodSrSo 0aNIkypdyrSp06dKY0EwI5VqLKtT1QCIwrWr169ctn4d21WEWLJjuVyYwFbIBCEL /xbgeEt3Qg1bbNkuwNJgQd68Ndb+xdEAi9+/dvH+jYuYbQ0AkCNLngzgMVqyYS+n ZUC5M2QuFDxAET0aiunSp6FAXc26tevXsGPLnk27tu3bQJdAoEACDAUIJihQyCJ8 OO8mCnzoMeHGj5c3AwYMkRB9gA6qCsD4UUA1uhu2XbpY90O+PHk2A1xE77LDuhkL TbwoaDIBgvfqE4aUQO5jiYk3TYDhww4ThPdCFm7osAN01A3wBhvsFTjACkNYR10X LqwgXnUbVqfDhWxpWN0AHVqYIVs7qLceeNF9SGIcIo4oow4F1CiBBDXmaGOOOlCQ GhRpAClkkEHWgNuRSCap5P+STDbp5JNQRumJHQ5UaeWVWN5wwAlcdnmCEl52ycWW XioBhxUJhHnCmF4mEABKIMABpphkHoHFFXjcVIQIU6TJJZtwYDEFCCqoIMAENiSA hRVHrHlAAlNEqo0BNqgQwhWRysnmEXAM2owBskyB5p9knpAAHJOqcOqcjoYJxxUJ MBomm2Ee4eesdxyg66689srFDT8Gm9pHUhZr7LHIJqvsssw22yQH0GqRRwgXUGut FtBy8AQB5T3Q2ATmlcAted6y5Ude5lUxrh/lokCAFOaWJ263YGhBHgpjbJHuug/Y a94D4fI7hnkE6CsvvxOg0MLCW4BbnrrdsrVFuQ6TNy//uRJ/ge7DCDcWrgwEhNxH tSRTG3LITIQ2mgcsi9ayy6M5K/PMNNds880454xstthGyzPP25LXQnkYAGEex+Rh UV4DGAx9tLpACIqF0X5ggMHRfkAMwxQwlIeF0/tWDcTVLVhNddjmtaA01lmvy/bT br+NtNxw01233Q/fUNzefBc3h86ABy744IQXbvjhjISWBcuLe9D44x7csIYGlFdu +eUlTH755pVnzvnnJVSAwOikl276xXj7gTreEKeuOgwNNAC77LHPbjsZmEaq++68 487777uTEcAVV9xZPPHGJ0+Gj8IGm4FqiEcv/fTUV2/99Uhlq/322gftuhhx0y2G /wJAlN9E+einX74YAVhhxQJ7LOD+/PRjwb4VMOSPQQNW3Ol/8VZg3xQwAIMeKGB4 /DvenaZwv/3VoQEm6N8VGnA8/t3PTQuoQ6zoNz8Ghk9uYgAb3sZ3MiCU8IQhEwMF MsBCFkKhhS90YQaMhL0a2vCGOMyhDq0nHOJkgQQluwAHeqYtGowoDH+RwtFK0KDo IDEvSkxXEwfwRLZEUV5TrOIErkieKmQxiUv8IhTDeEQwSrGMYwyXGK34tDVucYkF uNGNdmCtCyzhZChTmQcy4DKWraw0HtihIAdJyEIa8pC2CWIdF1ktIXzwbasT2hgA djfzfEEKA1viurSAAgWwxf8LflDY3PyghS9Q4QET22ImVdcxMEygYVtAwcHK04IH SOEBp5yA21pHHgKwxZUToKTF3GZLcAlhDLIcZSgfIMsWSEGEkaRbCVJQgipU85rW zOY1S4DIbnrzm+AMpzg1YYEFlHMBYDBnXNJ5TjCoIXbwjKc8Y0cGEMzznvTEJz7J sBYh+NMtF6DAP9/ilsAg5gZGMMIZGnMXxLzACGEwAkMFkxeEGqEADLUDCzbKUQgU gaMgrUEHRkDSkpr0pFwY6UlXWlIu5KAeMI2pTDsAmpW9zKZ+FM04d8rTnvr0pzi0 g1CHugUiFHULP3vCBniVA8Qscam7+oBT0wVVXW1gqvL/quoBpPqXp2mVqxvLKq+u 2tVwfRWrXTxrWcUaVbRmTatkDavFcrCBum7gA0HEIwFS9seXtQyQ0AOqYAdL2MIa 1liKTKy1LEDRbyGmoY6d6F+EoAChARMwiplAZWnpFsBQ9AtYo1hi0vivvxg0LyL0 w2VHmxd/3euxjZ3AFx5QzMdmNrKOYSwjd3uBGtz0r8D142GHS9ziGve4SsGSHYLo M22V6gRxjZe8nhvdinXxuQf4pHQtRt0LgMAEHLBu1rCbATKYwAQsWCJ2D1DPNHxA vV46wAZQogQ7PA27E1AGC8RbAuq6tQr4XavFcrWrDSxSr3w9TR9J08fAIvfBEI6w /4QnLIkV0KAAaLAwDWigLr3ulQZouEIBgkDiIPDAAhZ4AopVnAIaWCHDIEADiaug gBrbWAFMKMAUJACCSEkgCD0og5CHXIYWY+EFaMACCGgAZGY6GQUPaDEarCCBDc9Y BljOsgyYwOQ4pCEOJeaBFMZMZimkoAoVSLOaK9CENru5zSUos5znbGYt2/nOWy4D baFM2z77mbYpYAI2S3DNChDamteksKIXzehGO1oQT4iDHCdN6RsVIAAhiIOMNh0d CazlAprm9IgkYIu5tEfUnb7AAqYglyygegASWHWk5LKHNdu6AlvQHQ5w8Eg/EOAC OIgLr+lGgFJvode9XAsYUv/LNgIEYNmpI8C2PExtAsjg0djOtra3vdOfNXeIQCNA C8aghRaI8m3qksIXaknuZGJNXROwFzO1sNl3v2vdCrAls7so7jE8025VWAKdBz6H 2OKWArc9uMEji3DcIoYCulVsEIkT3AXb1MHczrjGN87xmVmAt7tlLFtmoIZvpaCz DdfBH9ZAk7+oXA0No8AFLCCINVxgswoQggdUroMJNNwDGriA2zw5g577nKJXrMAZ KgCvvDScLXoojwum3nS2yPyVFCBCms8wdRfMPAtWD8EW1vCHLLyg6y54gc81UIOj W0ADM9CABbJQI7AXXQ1Q8LktVDODxlhgDUaHeLVuEET/kqH4AlsIDcwWf/Hndfzx kI+85JM0cxRb/vKYt0ABziCBMxTABZ0/A7WZIIGp72AHn3fBGdhWAq6rfQJZmPrq 313610NA9qyfegFOf3bVs60KXEc77rEWTbkVH93I1qTr2rb8aQ5am9An9OSnT/3q Wx8pKTbOD8HAgYD6kAIcIEG+Q1AdEjzAk9WpQAu+kAIJtEEBWzCi+dE/gPfjgQYu Ur8XwjD/CbCBXUTQIg3CBnKgAF7wALXUAmCwAh7yBV/gBRAoAy1QWQrggBAIgSmw b2+TAiUjH/nmBwooBF5gLe0XHfo3f1IgBw8QAkZkIfUHfzTQfwOgfwyoAxXALuQ3 /wDm50vRQYBfkAU6oADdJ0fzFwKT1gbstzh8RBqmATMvxDLXF4VSOIVU6AlIcIVY iATgxz3aEgdD8IVDQANDQAd/1mdMEAcGYAArsANpuAJlCGhe+IUrQCFx8IYPMANx sAMU0oZ0cGM3doZsuAJqqIZUUIiGWIgzsGGKSGJ96Ic1xgRLcIiSOIkz4IiWaGMp EImTuIlUwASXeImZyImbmDJ+VYp+VYWomIqquIqF8AZu4AZD8IpuQAITEAaySAOv OABB4AYxGItuYAu26AYrQAK4KAGyuAKySIvBGAS+KAFhGARWRgO2gATQWGI0QAed 5XBscQPa+Bc3EAbguANhIP+Ow0AC4jiO4XiLyViLsriLbvBjbhAExPiKyviKQ0CN 7+iKbhAG+giMrxgEyPiORkRiXRAEOngBYRAE0GGQQVAArPiQEBmREukIMqAHNKAH WsBhD/ACcUAHcdCRH4mHbTAyDzCSLUgDbNAGVTYAM6AHekBJY6AHSxAHRkQDbTCQ M+ABPWBu7MIDPRBqNTkANDADdEAAepAHWlABCmAAA9ACbLBhAyAHbDADKMCAPNAH QSABBLACFUAHsEYDXakDoTYiNUkdNRkEeCiUigiVQbmSRGlE1BGXXzmXQ0kHZmmW QglrEuAHFWBEaUkDdwmYNckGVYaWE3mYiJmYqlht1SadA8vna4+ZfEcjmQTziZYo A92YFwsXWZvpWJ35LQmHW5/ZGBegmKZ5mqipaCDDmHpVBX1gh2+YBqOZF0Jwdd1Y m1P0agMQR7o5IpzXm9XBm8C5m7n5ameABCSQnMq5nMyZAQI3cHM2B5TZRalZndZ5 nYT1mNq5nW/TNalDQFZgNXiDAe4zNamzKA2QOmNTNdzZntyJnfAZn/I5nz4VCAA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/png Content-Location: http://l.yimg.com/a/i/us/sch/gr4/gradient_header.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAABQAAACWCAMAAADpL1jsAAAAA3NCSVQICAjb4U/g AAAAz1BMVEU6rwg7rwg6rgg5rgg4rQg5rQg4rAg3rAg2qwg3qwg0qgg1qggzqQg0 qQgyqAgzqAgxpwgypwgwpggxpggwpgkwpQkvpQkupAktowksowkrogksogkqoQkr oQkpnwkpoAkqoAkongkonwknngkmnQklnQklnAkknAkkmwkjmgojmwoimgoimQoh mQogmAofmAoflwoelwoelgodlgodlQoclQoblAoclAobkwoakwoZkgoXkQoYkQoX kAoWkAsXkAsVjwsWjwsVjgsUjgsUjQvLBsMpAAAACXBIWXMAAArwAAAK8AFCrDSY AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1MzmNZGAwAAABV0RVh0 Q3JlYXRpb24gVGltZQAyMC83LzA5essDYwAAANlJREFUSImtyDVWAwAQBcCPu1tw d3d37n8mCtIQptkXppx0QJjUCc4ucPaAsxucveDsg0IOQPqhlkOt8mdqOQgZgUIO Q8agkKPgnIBfOd6UcXBOQSbBOQ2ZgcxCuzkH/5mNpjSgkPOQRSjkAmQZCrkEzjVw roJzBbIBhVyHbEK7uQXt5jZkB5y74NwD5wE498F5CIU8ghxDMU9apDWKeQo5g0Ke Qy6gkJfgvIJfed2Ua3DeQm6gkHeQe2g3H+Bf8+lHnqCQj5BnyCs4XyDvUMg3cH6A 8xOcX/ANWnWQuQyXwVoAAAAASUVORK5CYII= ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/png Content-Location: http://l.yimg.com/a/i/us/sch/gr4/header2.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAABqoAAADICAMAAACnIUCiAAAAGXRFWHRTb2Z0d2Fy ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAgpQTFRF////NrgG6vbk7/fn8fjt5vbe 1u/F2fDN9fjw3/HV5PLXOLEJx+ez5vLd+P324vPa3e/O+fr3xOatO7ER+P3x3/TV SL8Azu68GFwGHGsGweasyey1S8IAzum9GmMGveCk/P/4PLIUzui4v+WmKZsJut6f MqQQ6/jeK6IJze23Qr0AOKwIQKkcO7wAN6UTtt2bH3MG3fTO1PG9IXwHNbgFT68s Sq4obLxLJo0IOqcYI4MHrdiNxuusp9aLUsQHo9SFk850KJQIWLQ1FlUFSsAGf9NJ RKsia8wri8lrZMooZLlDltB5f8Vgcr9SR6wkj9dhruGLteWV2PPGu+adYrdAhMVj jMttW8YZ+/j8X7Y9kMxzN7MJUrIwF1QEpN56e8NbeNA9rtiSr+SNc805ZcohUsMO w+mmWcYRp+CCsNuVT7Eucs0zl9trmdxuS8IKnd1zW7U6ndKC9Pnmk9ho5ffVVMQY gtRMi9ZZhNRRedBBnNJ/Oa8RnNB7YMgbidZUYcghdsBWa846YcgpOK4IquGFb75P c89DOK8JULAvtN2Wh8hot+acOqgYn9x5lNllfNJCNboAMqcIN7YKMaMQNrgFKqEJ NLkAOLAJetFModJ/XccnZswzcL5OUcMCOqkWeMFZLaUJnNGAMKUIN6sINbgEN60I IYwIUsUhW8YjNrkEP6sZNrkFN7cKJJsJcQx9FwAAAK50Uk5T//////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////8A/Gal5wAAFOVJREFUeNrs3Yd3E9eewPFhJI1KRpY0 kSVQQUaKJKTYGDvBhsQYxws2BtN7Cb0uAUJIIMlL7728Xrf3Xf2Pe393RkKmvPdk WDZ4vp9z0hzeOTzl6n7vnWq07lEb2/G708rG+eO1e//ts+LjYz//HzzBfn7sY/nv 2Fq82s7xd14UB6bXtID7WnN8Xg+S3+0Yq/Fp4GEYd/3zhukDX5ZKji2cSvXoqxvu k6qnmOuffE89RKo2HJ8/3TVKtu8f5JuEuw3un6qWcjk9SnKly/PHWdPgUaVq5uRw xS6GE4FIJBKIj1hW2ake2Hl3qo4xzy8FxxabqsEdwyU7Gw4F+/r6goFY2Co61YNj fJfQbd3Raq5sJUMyl5hqkGTtyvA4Sxo8ilRtmK862UTQUAYCoVgyaYlyaevgglSx p1oy+6pFHfnbUc0VQxEZJUZfsJ5IhEW2NDXDtwltO98p2ZaZlkGSCoT6vbnEqY5z HBAPnappFSpTdyoU1gMr7LLy1SNdqfqYOX6p+Hgxi+XhXFGPEiOYSOrxEY1G5S+N 6jhfJ7h2lOy9es2bToTbU4kbq9Nsv/GQqZov5fv14Ip5849HBllua2cx9Owypvgl cwiw9/EyrkbJgAwTUw2NeCRihkKhWCw2ImPG3s7JCChrbjjZgF7NRBfMJe72exsf EB4iVbUpb3SFkslkNNZFL53Lm9qz0DfM8EtHz8PlgLelCqhOxYMje/bEg6ZpSq0k VsXLnItAa3DYDstypi8mmbpnLsmd5CPColNVe9ux+tToiqhOJZR4hwwwpXjaa9Xn TPD+TdVWJyuHdQbUCAkGTaPx7mzicCAdqNfr7jCxhmkVpRq2k3o5k0zqPnXPJXpn ZX/Fh4TFpmrKsQbc0SWhSpiukObOQsWN7jHA3zDB+zZV805RLqeIRKOhYFA1Kzr7 VuSwnDdXsVKjZmRkZHSYY4B+P/o3nE+6h2e6KhXyRKPRpGXZ7KuwyFTtcPdUZjKm hpNEKqB5vZJZSI2vo/qXcv2fb1N1pKL3VIFkzDQjN98LGoHZLYZRf2/fYTVU4vFE f384XNzEd8rfNtlhKVUimfDmErMzlcggSci+KneEzwmLSdU6dw7SpfKGVlDoXqkB pyYhta9y9suvfZ4J3qepminp81TBpNp0H84eKlyxjFPfGftmM2fVUHFPWKlRYn/A l8rPdrjHZ+LReLyz5A10Vr5qMpG5xCrt5JNC76mqDZcT+lR5Qkql5p3IHXqE6fFl WaUZdlU+TtUmO6qP/sXUIIlE8rsuXrz0/a7rk4e+m9DjRB8qVivmyjq+Vf41VtKr 3roqlUqVu+KVecRd+uqNVUztq4ob+ajQe6rGHUuu14nKniogN5dH+jxurOr1eFzO h+aPkir/purVnCyXB6LRUEgNkpRhhK6eO3du9kTdMFIp2VaZ7ijhEKCfvW3H9KpX h0rmkrTizSTuwtcdJe4hGqCXVK2pFuUydZmD1PBK6acQDCjufZ5yGNA0E4mo2rZX xkiVX1NV+7Jcl1MQ3s5bxsa+uXPvbtHXrvfJLCSjJDGiZqFpvlZ+9UVF1jN9Ubkw S00der07oOm/lcmkrrZVai6p8tgK9JqqbU5YL4T0HDQQmpi4MKorFbowMbHXkCd4 maZcBhgOl4+SKr+majpn6Xs6Q+6mKvX6J3OF9069eaVwO+tuqwLtUZLl4I5vvWOH 5ERVzD08o+Jk3JFKpWRjJSsaOfPNlRXoMVW14bLpbqr0avnC5s1DW/TQ2j2Uad50 F8wB75x5aZBU+TRVb+dlEorpg8RqmGTPZS7uM86eGLjVvHh7YCDSGSUjVjjHs3N8 aqZkpeV0ppTqsHE/sq+KS6tGL7OtQm+pGtN7djMaj8t1f8ZEJ1VnhgrNV4y+Pu+c uVyKbG8jVf5M1aCehNxzEMFg2oi89ZZK17nv1DCZvG4MtBc0+sqKMrfN+NS4I1fe xGUqSY2cuHTpUsQw6idOnLi+V+aTS5e+zRp6MpFlb46LANFbqsb1hV2xmHvx3wNS FXAnodGN60iVL1N1RB8lTiQS9XpAzkEYZp9hjLx/W/1wNGJ42yp9CDBpcR7Cp2ob 5Xxmn2yq1ETSbGYyCcPIZzKZoTNqnLzbLAztNuQQoJ5LbJ5ujN5SdaMcknMQ7nI5 aGTPnp27qlN1Ye7K7G73PETQNONyBNCq/C2p8mWqDuZjMgnF43XZe6f0xTdG/vz3 3nEdOWMuZ6vi8f5+y8rxPhBf2lCygnKARqUqYkwUCpOTqlwj5wuFwgU1Rs4VJptn DDVQ9IImmf1HPjD0kqo1Jbn+LyS7KpmD7j26LCdD9bGdaNSyHHZVvkxVrSq3/5re gsYrlbH3ld2dVLm3NbhXIts8PNuXjuvbf2XnLYdnhoYyGbUKfu1QoXBeLtQ61Gz+ erdOlVxYYVklnsGFXlK1LmdF5Pife8PeA1IV8W6asWx2Vb5MlVovB/TxP7M7VXcM uKmSR1aoUVLeyhfLjz6VZyql9VnviNH4/e/n5gJ6N1W4+Lr666mPPvr3r42Umyq9 7OUTQw+p+qM8/q8vKpNQMJhOe1PP6L49F+rtFXP7ZJVMQuyqfJmqsZwV7Bolhx+w 93afrmTxLAJ/OphXqQr0h0IBNUbSr72W1vdmzhYK7+p5Rf1I31tleier/sgnhh5S tdVWm/bOlV1uqk7MXSsUCm/cMr1ZSK4wdVNVZFfly1Qdd6y0EfRSlbrP3ts9Aqg3 32qUVPli+dGNcljfVCV33kU6Q+NUJjPX+QfvGVw6Vey90UuqtkuqzO5UvX62mXEd GvEWzJ1DO0V2Vb5M1bRjReR8ub5MVJXqwpkzXwfdyaehpI327Z06VRap8qWNkqpE ez3TXtDcymSu3H3iW54DaG/nE0Nvqeoz4v3eg2plfJ0amsxcPHvq3cJk5lQnVeyq SFXdS1WfYfyh2WxO6Mmn/h/NzW+MtK+rIFW+T5V+QJt7Q4NrVybzVvuUpnc5MalC 76k6KKmKtW+rklQ1zg/dltOhWzKTk+G7DwCyq/JrqoJGXD+pVm+9rxQK5/N69jHf z/zpUL2dKu9cFanypU1lq52qQCTS3lZdz2Te9Eo1kE4H75yrOsgnhh5StcNWk1An VXopNHHCfQbK+UJhn9F9Y1XYKrOr8udlFY5luod23FS9/8MPTTdVr7/x6+a12J1U hfq5rMKvjqpUpaLe3ruzrfokk9nVdTGxd6e4StWnfGLoIVXHndGQWgnpF6F1XQIo 6+VrhUKlfXunvrYrbNnsqvx5sXolG3MXNAF9APCVzz777V73AOBnH330oeyq+twF TZyL1X1LLXvT6WT7ZEL78ps9mcz1zrXE7TebycXqX/CJoYdUrSllowP9/d0nq1zp U5nJyZC+xtRNlTwE0GFX5ctU1arZcJ/aVS08C+GOk7Re33Q/f4tbgP1p2i6a6c6y N+g9WP3C5swn3feJB+p1eV4ttwCjt1S1NhXDwXtS9fXVW4cKk03ZuA94h5flyI5V YVfly1S1tpetgNpV6ScAdm+9u97w4J7R7OdJpL41WBmNBqPeC4D1S0BkaGSvZfYs SJW7nsne4ANDT6n6IG+pOSi2cHj9YaigbOk83s07VWVtZFflz1Rts61oNJoI3X2U uPtlRDILyXKZx9X6VO1yNixziX6nWWf7PVIYqnSXSh5WoaYSHleLHlO1ztm7N9mv X0QkrXKH13uFyUNv6bWQvmhHbdpjMUsPL1Lly1TNVCwrqfbe3sXq93KHiTzbzcrP 873ypx15yxrpl+PE5p2LACPfn93bTlVAv7JeLiXWrxQHekhVrWpZ4XBUv4i8c+HO K0OZfXdOharxFY9a2WyWVyv6NVW1jVk1SORJkcGB+74zT97uIKOk0WiUmIR8amcl HA7LyQS97F14VtN7TKTaecfC2Ww+z6sV0WOqWuO2Gl/uJaZ6zSzDa/fmN17rertD IBS1irZtT/HCep+mSl5YFQ7HYmqEpHZ/Frq7U3tfCRjBoBm1ymqUvMjXyq82ZaVV sfZc0vXMis7zTExVqrzdyO3n00KPqRosybZKxlfIdC/wUrEKprsehKJKFc6qOai0 jlT5NVVr1OY7KQ8BNHY3h27dnaqzP8ztTZkJq+E4+dI0Xyu/mnbUXBJVw8S7Siud NgJXd+3aZbnX3ahFrxlLZvOOYw9z/R96TVXr7+0740u/OM8I5vN5655SyaaKVPk0 Va1tjgySkJkOH8pkbi4s1ZvN5lwoEg+rUjnOJr5VPt5WlWVFI6cTvFYZr7/RbDb3 3XmbeDJrq1JVuJ8BvadqQzWrz5nrY8z6ocjW+WZzS/tEqBnqd0s1PEOq/Juq2mk5 WxU3A3JPZ+Z21xmr4JZM5lreUJOQClW+ymuIfOwL9xCNe/OLrHuN/kMFeZSA90il eNJSpXI4SIzFpKo1XemML7nKNGBYFwuFN92rutToilpZO5fLuwuh55ng/Zmq1jo1 CyVjITNiXB36U2Z2X7tUe95X6dptmMlRNUoazkm+VH427x6iaR+jCRgj14aGhva1 3/6hSpVTc0mVK2+wmFS1Dtj6KsBoIh7XwyubGRo6ZbjP/osl5QyE4x7+a7V+xgTv 01S1PnXkIsCQmTJ2yW13s7s+2bPn0q65ZqHQPGEE3FI1OPznb7XLZcsaGekcozFi v/3www8nDHcuCWd1qUoc/sPiUtW6ocaXlZTT5vJKciN69ebNM4cj7j0QanRVKhMT L7oXl7Kr8m2qWkfzau8dj8cN49vNmzdnOi7uNgJhOQXRaHy5ge+Uv20YznrrXj2X BPRlgPpEQixqNXSpnAN8TFhkqta8WJbxFfaeiiJvzUsFAvVEIjyad5xKxbYve3MQ 56r8m6ra9rLcgZcIpYzGlslMwXX+TcsIWW6phgf5SvndzqrXKu+5FSm5+M80E9Fw Ma+mkkre4e0fWHSqWms22ZbeWKmdu3sUMBAKyUOyZRmk1kEb26tlUuXfVLVqU3IP XiweV2uZ7PUts7OzV7Z8a6WCSavsOE42+yWlQmtM9lU6Vt7OSp4gemcuqbCnwkOk qlU7WBnVrZJYyXHmWEztqPKOGly2XTnYubWcVPk4Va3WyYp+tImagFKGEQkEIocP m/IgE9tuNJy3uVcGyuCLet2rn1yR0CRUeUer8uw/PFSqWq391fYAiwpZBUmo8vn8 cNed5aTK16lqTVfLclJTHyjWD9xKWlZRq/KqPHgOlOTktz797c4lRVuuUc/nc6e5 lwEPm6rW4MFSXg8wyZUulQyufPWr7sM6pMrfqWptmC+Vw0mZg2S5nExKqFStKlMz fJvQtm5TpWF1ZPV9meWyMzzOk//w8Klqtca+KjmNRvfwqlQPLHz5EFcA+jxVrdbM yapdlFol5Y0fStEubeVGGSxw/O2SXR7VikW14s07leFxzmXi0aRK7ayObK9WHImU 2lOVhqdevXtwcV+V71OldlavHq3m7LI+7qdWM+/sZwrC3Woz4xtLcqbbm0sOHOdU Jh5dqpQ1Y/tPHty+fesHR3beZ7fOropU6Ylo55EPtk5NbT25f4wZCA8YJBu+2DZ/ 9J2pr3a8OsORPzzqVP157KpIFQD8xFPFropUAcD/e6qe6WBXRaru78+PEYBxgv/D VL20/oXn1q5YsXL53yjLl69cseK559avZ1dFqromHzVGnlNjpD1IVqxY+9y/vcRM hIX+mrkEWFSqXlohVqpJaPnyl19+Wf155Ur9o5e6/wfcV+XrVHUGycr2IFl+n0EC v4fqr5pLgMXtqmQdpBdCbWp4rVVroRapIlWdSegFb7XcNUhWrF37Avsq9DqXAIs8 ANhqPaNmorVrV2pqaL2w/p4ZiAOAnKt6Zv16lStZMrujhON/uM8o+YtzCbDoVP1l 7KpIFQCQKpAqACBVIFUASBVIFQCQKpAqAKSKVJEqACBVIFUAQKpAqgCQKpAqAPhJ pYqnVZAqAGBXBVIFAKQKpAoAqQKpAgBSBVIFgFSRKlIFAKQKpAoASBVIFQBSBVIF AKQKpAoAqSJVpAoASBVIFQCQKpAqAKSKVJEqACBVIFUAQKpAqgCQKpAqACBVIFUA SBWpIlUAQKpAqgCAVIFUASBVIFUAQKpAqgCQKlJFqgBgKaXqeSZ4UgUA7KpAqgCA VIFUASBVIFUAQKpAqgCQKlJFqgCAVIFUAQCpAqkCQKpAqgCAVIFUASBVpIpUAQCp AqkCgMeSKp4BSKoAgF0VSBUAkCqQKgCkCqQKAEgVSBUAUkWqSBUAkCqQKgAgVSBV AEgVSBUAkCqQKgCkilSRKgAgVSBVAPB4UsUzAEkVALCrAqkCAFIFUgWAVIFUAQCp AqkCQKpIFakCAFIFUgUApAqkCgCpAqkCAFIFUgWAVJEqUgUApAqkCgAeT6p4BiCp AgB2VSBVAECqQKoAkCqQKgAgVSBVAEgVqSJVAECqQKoAgFSBVAEgVSBVAECqQKoA kCpSRaoAgFSBVAHA40kVzwAkVQDArgqkCgBIFUgVAFIFUgUApAqkCgCpIlWkCgBI FUgVAJAqkCoApAqkCgBIFUgVAFJFqkgVAJAqkCoAeDyp4hmApAoA2FWBVAEAqQKp AkCqQKoAgFSBVAEgVaSKVAEAqQKpAgBSBVIFgFSBVAEAqQKpAkCqSBWpAgBSBVIF AI8nVTwDkFQBALsqkCoAIFUgVQBIFUgVAJAqkCoApIpUkSoAIFUgVQBAqkCqAJAq kCoAIFUgVQBIFakiVQBAqkCqAODxpIpnAJIqAGBXBVIFAKQKpAoAqQKpAgBSBVIF gFSRKlIFAKQKpAoASBVIFQBSBVIFAKQKpAoAqSJVpAoASBVIFQA8nlTxDEBSBQDs qkCqAIBUgVQBIFUgVQBAqkCqAJAqUkWqAOBJTNVvmOBJFQD8tFP1ORM8qQKAn3aq vmGCJ1UA8NNO1T8tY4ZfKo4x/gEszVSt/jum+KXiHxj/AJZoqn78b+b4peFnqxn/ AJZoqn71zxwCXBqH/1aTKgBLNVWrf/Ujj6xdAp76BakCsHRTtXp17b/YWD3hlv2r /Idk/ANYuqlavfrHZz//z18+vWzZsoV/rFp2z4+enD9Wub/9B/y8/ef2zzyrvF/2 9IKfrer8kkf/9wt/a8fkZ8e6fler2r+HB/2ffHrZL//l829+sZpUAXhi/K8AAwDS hl7KCZrYsgAAAABJRU5ErkJggg== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/a/i/us/sch/gr4/carousel-bg-top.gif Content-Transfer-Encoding: Base64 R0lGODlhFAAbANUAAPr6+vn5+ff39/v7+/Xz8/b09Pv6+/79/fv7+vj3+PTz8vTy 8/j4+Pf29fX19Pb19vb29fX09fTz9Pn5+Pn4+fb29vj39vb09ff19vXz9PX08/79 /vT08/r6+ff19f39/vr5+vf29/X19fz8+/z9/Pj49/z7+/38/Pv6+vTy8vr5+fj3 9/n4+Pb19ff29vX09Pz8/PTz8/39/f7+/vPy8v///wAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAUABsAAAb/QJpwSCwaj8iksphq0pqp Z1Q6FaZisdRikVIosN8FWIstm89orCRG0HAIEgL89c6w2/aXfs/v+wsFLw4iBRcO goCAEQ4RERctkJGSk5MuDRAYLh4NLQ8QDQ0PGBUQFR4PFS6qq6ytrQIWFiuzArUr IbUCLrkrArMlswnCCbPFK8SzDCwsysvKzcvR0gEBE9QUy9cU1tQTLNQq4eLhHePh ICrlKgAoAO7t7u/tKPTs7CgIAygDBv0DCAhQGMCHYKABEyYGDECYEOHChQ0hwphI ceKIihgnnthIQuPGEx5Bwvgoo6TJkyhTbpBx4MPJAwdYmoRZcobNmzY34NzJs6fP CRk1ggodSpRoEAA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/png Content-Location: http://l.yimg.com/a/i/us/sch/gr4/wide-site-bg.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAA/wAAAAUCAMAAAAHgMa7AAAAA3NCSVQICAjb4U/g AAAAOVBMVEX///+As8x/sst+scl9r8h8rsZ7rMR6q8N5qcF4qL93pr12pbx1o7p0 orhzoLdyn7VxnbNvnLJumrAfihxhAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAHHRF WHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M0BrLToAAAABV0RVh0Q3JlYXRp b24gVGltZQAxMi85LzA55jTPxgAAAHRJREFUeJzt09EJgCAABUALERERaf9h+4q+ WqB3t8OV41Vra72PMedaexfgB65r77XmHKP31mo9n/BFfvg1+SGU/BBKfgglP4SS H0LJD6Hkh1DyQyj5IZT8EEp+CCU/hJIfQskPoeSHUPJDKPkhlPwQ6jP/DVFZGlXP AEcTAAAAAElFTkSuQmCC ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/actionbar-bg.gif Content-Transfer-Encoding: Base64 R0lGODlhAQAbAMQAAP////7+/v39/fz8/Pv7+/r6+vn5+fj4+Pf39/b29vX19fPz 8/Ly8vHx8fDw8O/v7+7u7u3t7ezs7Ovr6+rq6gAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAAABABsAAAUWIAAEgjAQRWEcSJIoC8M0 zgNBkTRRIQA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/actionbar.gif Content-Transfer-Encoding: Base64 R0lGODlhFwBfBeYAAP7S0H5+fpbL5eO1MYvG5NLq93q20uTy+m2qy/7lsf75l7OS BqzX7rjb7eT5/1BQT5Lk+P796fypnfqOeGa23M/z/SuGttvu+ez7/bre8v/bhKnp +d/3/drp8Ov2+v7WchR5rLbc8dbs94u500+dw8fz/rHZ7df1/bSzs9PT01qkyZ3J 3bnt+7/g8cbk9M7p9sjl9Pb9/9SxHMPc6fztx+Ht84fD4P7dmvT6/JaSkvD2+fda OP303Mzn9sLi8zOZzMzMzBSt6wDM//9mAAShyP+ZANQsBebm5vXHAaBGHsiUfPza R/n9//3//8/n88/Nze/v7///wtavBf//9f3AufzOTv7+pdqnLajM3+fLGP//2P7+ tOO+Hv/MZvX19fH7//z+++/iKf7VZCuRxf/hlVKr1vbuTkKTvLF6JvK6Z9Pm8MSV J3q/4Mfj8bbW5ryNIUWm1P750Tyh0um8RtvFLurUL+hgMP3mq+vMfqfS5/Hv79z3 //z5fmyyz////////yH5BAEAAH8ALAAAAAAXAF8FAAf/gH+Cg4SFhoeIiYqLjI2O j5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+ v8DBwsOXR0DHyMnKyUd/RyleftLT1NXSXinG0dbc1VDH3X55FDrh4N1lbAbmQN0Z Nn5j5dzn1mwwfnBY3fU4Av9syuA4IKDMPwEmqNUTISehtAMQX5gwQcHCjGn1/Jgo k+GCx48XKiJQ2I6aCDgZRKhUKbJaRmkiyryYOXPMCGsv/cCgAKNnTzn7XJakZgMh BThs3qnAOXQaBQpjLIwwMAZqDaHWBEidV8OAhaskoYQb++2Z2LHWyjpbxnZZM2Jw /+PKnUu3rt27ePPq3cu3r9+/gAMLHky48CtjbRMDafZsG1pq2LRxixAlypRu35pO m6KASxYrl+lplqYlDJ4rdLTwG+1nSxYafmRYWS1tipYoW6yYGRDBz5owCqxs0RLa zzktZrJk4cIFD407cwYw52JGtbTjdQbcmUame3cNV9BswViSc5YBGtKr1/AhPJ0o 5KdFsBJmwIf798WED7OleEbzVYghoBhzoBGGZSRVY0UWVTTo4Bpm9JYgNQoMUMUA V1xh4QAywDfhNHxg+MYby2m4xmwfSqOADG/UoUAUusmwhofknSVNBFsMJ19lEkpT Vgo2PubjYmsp1tZbhiWp5P+STDbp5JNQRinllFRWaeWVWGYpFwEgEODll2AuwmU1 BZRZwA9iguCHC2y2ySaaiowZwpx0zglnIlwyoOeee96JSJ588unnIYAGqueghnD5 w6KMNppmJVxCCoKklGpp6aWYZqrpppx26umnoIYq6qiklgqKEknsoOqqrC6CKgCw xhqrEa4mIeuttCqCKhW89tprromgKsGwxBILLCKoTqDsssseewiqrEbrrCGoGmHt tdjWWgmq2ybR7bemhivuuOSWa+656Kar7rrstuuup2DGK++fP6C16J9+/ADSvj8c gKggBPghwg80FfyDC/7iK4ILP7Tgg8Mt/MAAwv/+EfD/wiH8QKfEEydMqMAuEMCA xBKLTLHCIh+6JwEnf0xABhm0APPMGRDgcaIEmKmzzgRU3HOjQDv67tBEF2300Ugn rfTSTDftNNFCRC311FQjEjVaQhBhtR9CxOD1118L4YfWh4jtgBAYpK02BkI4MPbW Dpy9x9xzt+022YaYHbcQFfRt991wOwBBCUIQXgIEcb9dth+Cl+B44Y4jrnjefgzu +OWXQzB5IUIgHvfnoAuON+dElG766ac/rfrqrLfu+uuwxy777LSLGq8kAUNUcZx+ 6I67Hx7tXki8Ag/8pfABU9PD8swj78Pz0EfvA/I0Vw8z8o1OZALQjnA8siTeC49I //jgC137+einr/767Lfv/vvwq1vE/EUMIUkRYORvfyT4639/BADcHyPoNz8eGHAI 9BPgIYpAgwY68IE0UKAhipCAClrwggmQYCGKcIMOevCDN9AgIYZAQhKqp4QkdMQQ 8CPCRQyhCzBsoSJeGENJoFCG8cuhDnfIwx768IdADGIO1UAJNRhgBGcgIiSwsIIR dAALJFjiCBBAghWcAQE1cAQWsKADA5BABSSwgCMMwMUVGKAPFiABFhphgDx4IA8G iKMFEMDGDnjADTaIIwnoyAgEqMEDMyCADWygAj4uYgVuWMEKBOClQjpiJB0wgAoE gABD9tEPM5jBGfpgSUZ4Zf8GbrhiJBCQRhXMQBIjwEIWhcjKVrrylbCMpSxnSUu4 AIAST0hDGuxwS0g8AQUpmAAV7ODLJaQABTmYQBoe8YQl+GEJUkDmMhvRzGciAQlS yMECqOnMJVwTm9tkRDW9eU0phHMR4/ymOakpgwWQE5yOCEAc4rAAKcAznnFQgALq ec5GBOABNFDAOiHxzwAEoJ+OQMET9FDLhjr0oRCNqEQnSlFaCCBojRKAIi6Kg456 9KM/0Oj4PEDSkpqUpLvrF0RWylLfjS94GA1eIn6gkoPYVAAqSakTdsrTnu40pW1o A0Z/ENSUtqAFg0xqUo+a0h804KlQjeq9EHHR7GmPUSL/RYT2TFDVPORBfIYo08hC SokWfLWiaE2rWtfK1ra69aEbCIJc50rXDSgirmMJgl0REYQm+PWvgPVrEBIRBCYY 9rCINexg+eo1utK1sYT9whc2QNnKUlayiz1EENbGWbVl1hBBiJtj5ypawnKAAxBI rWpTe9rPFkKuJ4itbGcr10TEla5969tc94qI3Fbgto5zLSMkWwK58jYSHGCBcN/K 3OY697nQja50z9UGNrBhDJNgQwfyMClJVJcNYpwEBQwQCRPIQQ5qcgEbzhveRRCV DSCYgVCr291FmBe9QRXAeeuriHz9wLoGYMNUF5GviUgMBGMwMCPqNZEWWGAMGjFB Jwv4e4gfmMANJmCABSw8ESxQ2BBA2zCjxvDh6Zr4xChOsYpXnMNAAAA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/actionbar-bg-on.gif Content-Transfer-Encoding: Base64 R0lGODlhAQAbAMQAAP////7//f///vz++f3++/r+9/j99Pn99vf98vf88Pb87/X8 7fT76/L75/H75vP76fD65O764O/64u353+z53QAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAAABABsAAAUPICWOlGQ26KIibOEGMBwC ADs= ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/dropdown-arrow.gif Content-Transfer-Encoding: Base64 R0lGODlhBwAEALMPABBwoC+CrDCDqxBvnyB5pi+CqzCCrABlmRBvoD+MsRBun8/i 6yB4pgBmmr/Y5f///yH5BAEAAA8ALAAAAAAHAAQAAAQTkIBGFXMFnSHcWwFjLE/p JN4TAQA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/syndication.gif Content-Transfer-Encoding: Base64 R0lGODlhvAQMAOZ5AABFz////wA7sE1XtiVh2ZWz7a7C7Pf89IKj5IbTU4nWVn3N Sd3v0mTPHXXPOnTHP7XllYXUUXDINnzSQ47YXmvRJ13IFkioC8TlrnjWO23KMIGh 41e7F2Ryyq7gjYHTS2DBIGzBNWHBI2fFKWFux2JvyFq4HbrjoGS7LPb883TUNVO4 EnzXQJXXalaxG8zttn6e4W/TLnWO2Wd3zHDNM2h5zVy+Hbnnm2zEM122I3OK1ne+ SX/YRXvBTrzooIGi477mo2p9z+H01XSN2PX78sLqqGl7zqHeeFC1DnaQ2Z3bdGp8 z3yZ33+f4XiT21xmw2V0ynqX3Wh4zXGJ1nyY3mBrxWZ3zWBsxtXwwmx/0W2B0V9q xX+f4mR0yn2b4F1oxGZ1y5HWY2VzyqvZjm2B0rPklGPJH1CtFHuY3niU3H6d4a3a kHeQ22Z0y26D02JwyGrLKafYh5W163GI1ml6zk2wDV5qxXmT23CG1f///wAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAHkALAAAAAC8BAwAAAf/gHmCg4SFhoeIiYqLjI2O j5CRkpOUlZaXmIQIP1yZnp+goaKjpKWmp6ipqqusraQMJkgrHDYiIxoSOAyuvL2+ v8DBwsPExcamMF5ox8zNzs+MBNLT1NIC0NjZ2r8mFzs9LjkoIQ8LCRLb6err7O3u 7/B5UU5J8fb39gQA+/z9ANf4AgqEVudCgIMYFpRLoIDHwIcQI0qcSDGVDB14Kmrc aEofvwIB/AHkSLLkpBVnxmAgEiCFB4YRWJicSbOmzZus2AyZIkdLkBpgBuAcWtPj PpAiiSolycHFmjgJThyEEOFDhqVYs2rdutFNliUzurwRyrVsQI8F0gZIy2+k2bft /2zkOBgASJkAByhMUAG3r9+/gFkhMBBgRocSVwYEMGCFbODHxzzSpdsWsmVjIlCE OXEggI8iAV44iHG5tOnTlhEMDlDli2IDUjo4Rk07lVEASPu5rc271IgQLTwo6Uzh QAoaFXorX85cI4INagi/riGGxOzm2Cndzl05u3dKGh50hvAiAAQsASg0+M6+vftj G2BQuUPYAB0oJOxcf89/0G1/++zW34AOLCDEAS0cEcANNwSggAUDRijhhJ40wUQa MsxBhhFtlLDFE/tR+N1/AAoo4nc4wPTBBA7QAIcZFoBw4ow01ijIADjmqCOONn4n wI9ABglkj98xIMEELGSgQgsMFTTQAAi7EDlhIAA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/rating-bg.gif Content-Transfer-Encoding: Base64 R0lGODlhGQATAMQAAPz8/PLy8vPz8/v7++Tk5P7+/u7u7t7e3vj4+Ojo6OLi4uzs 7Pb29ubm5vDw8ODg4Pr6+urq6vT09P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAZABMAAAV54CSOZGmeaFoWbOu+sDvM NGDfeI5DfO//QB9iSCwaj0WGcslsOpmSqHRKrU4D2KwWK+h6BduAY0wum89lg3rN brvZi7h8Tq/PI/i8fs/XJ/6AgYKDgQ2Gh4iJiogEjY6PkJGPCpSVlpeYlg+bnJ2e n50HoqOkpaakIQA7 ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/rating.gif Content-Transfer-Encoding: Base64 R0lGODlhDgCyBOZ/AITNRdPT07q6usTExLOzs9ra27Xc8fLy8v7+/vj4+K6srU2o 1cnKyGtra+zs7ODg4OXl5YSKf/3S0GZmZqKiopCQkJufmJLG4ZeYl3i42PaUh6qq qrnN16zW7FeuJa/S49QsBYWFhemamKBGHsiUfMTe67rZmb7nnHi4I0efzCqHttLA vnitM4HGJ/z9+/daOHi83kijGDOZzO9xZ+v1+9zv+IPCWszh69vryvmBabDCymqy 1/yuov3DveDu8Yq5Ttbrvfru7obC4abT4uhHPPf7/W+VP3CHUprNeJzYbNtPSdfo 7vW1r7/h84iWdmi6NOB3ddHo88zrtepVSs7o9am+pZvK48PbpK/hhMSysNk0LYrS VVir1PPNzarLf3LAQajGgZXaOuny84zXK8Dg8s7n9fn89nnDR4PA391sa6G7lueL ifH57L/HteDx+prR7KzVkbnhg+DzzaXS6YjEOZrO6dlEPuytreBiXa7BlNrd12B0 RojDYuZpYbx1b////yH5BAEAAH8ALAAAAAAOALIEAAf/gH+Cg4SFhoeIiYqLjI2O j5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7SsAowMGw2LFQi7 iQQCB7+HFMIND4UbyxUbB8MBAcmCFA7W1xQY2gIMfxgQ4OEhAuAUyRgF6ekUDe0N FQR/FdHRFBQh9BvdIfoM/iHukHULkAtDCAL8BAiAJ4gBAQIMHGyoEKJChQfdCvkj sOFhxlogQ4ocSbKkyZMoU6pcybKly5cwY4pawOjCBZqKFiDAiWjBhRI8DfkUs+BD oQVIhxK1aVRQBh9Qo2aYmuFGtwxLsmrN8OHGjQtGq3r1ejPpAh1/MpRYW8Jm0Q8f /y5088m2RAazH7qBRco1A9gPZxvq0MHAx9QFU/Ma8jd48EeZkCNLnky5suXLmDNr 3sy5syYTjK4g8bCIDxvSieCYOJ0ICZzTOAohmW0DiRw5Hq4AiS3IhpTfwG0It2Gi m40TyJM/QYLcRuwvWKJHPxOjeowvVf48ScI9yZcvHrqf6ebhy5bzWzxYj3Gi2xYA T56U9/DkDHg1gtqoUdPmhPwYHnjQ3mIMVGFgFY95puCCDDbo4IMQRijhhBRW+Mct hriAAxg/sGCELi4Q4oIJLKCAQgtHuNDAFSH+MWKJLYxhxDEtsPgHDjDKSOMYY8QG xhFGGHGEM8OY2EIcf/xQzf811mSzDQMsfBMOOOOUU8AP6KhTADvuHEEAGBjQE4A9 +ETjBAM48OPPPwFdwYALYHh4xEEJCeBEPH84BFELQu5xhBN6fKRhHBs9BJGFiCaq 6KKMNuroo5BG+tIBEVQagUUBEGIpBAl02ikGeP4RwTOkDtMOBXhGwKQ1BUQDqiAR TAnOA6em+sCtuOJKQKaiaqlOBQ28KmqlFETzDgOoDvKQPdxUQEEi7LTRQKiHVIDB PIoQ8A61knbr7bfghivuuOSWi5kPVnCRFBdvECLDAlYgIO+8MnAwyAJF5KuvDDLs sIO9fyxAw8AEE8wFwAvUoPDCNfBbAMJUUFFGxGVMXMb/v4Is0EQTZJCxMRlW7HCw ICXsgJQBBiD1BgcAC8IyvB0s0LIhHMhghQwlKMIBFzs0hUjNMpsr9NBEF2300Ugn DW4Qd4jgtAhrdEEIFE5LEMTVV0OxwiAiSOD111CkkYbWgojAxNloP53G1n+IoMHb cGughBJ+sC3CDHjnnXfUgqxBxN9TBE6EFkrYwfYdeMz9txJQdJEF23+ssEIWdgSu RRaJZKHF4JAfonkfUieyAuOdK2366ainrvrqrLeOABBedPiDF0AgQIgZJBrZQgt0 mGCGIAjk3oKll1aQh+1AsLCpp50y5AUKo5ZqagN3/gD9qg60GgCoLAwvKzi1/jB8 /67kE1CAF8P7mg6wdwJBh6XFBvCOkvEEv6wTAgTgbBi1C4J7GGFghwCmBYTfDeJ1 JgiDtSrAANshQlsMaZ0EJ0jBClrwghhkEAxSwMEOenAIgoCBCsgQhRKizAB12AEI /4AGFRTBDTAsYQ3qsIAVtlAMJ0RZE26yQiGoYA4dCGIQDSCEGgrChx3IoQF2aMQ/ +BAGUIwiDHaQgh7+UIhYNEAUjqgCRviQES2sSRczSMYymvGMaEyjGl9BghG84I1w hKMEBNHGr9lRAiCY4x/a2IM++rGPeaTjCHhAyEISMpB7HEHc4obINubgkZB8ZCNH AIJKWtKSeqzjHb8WBEEyooGNnxxBKNdIylKa8pSoTCUGLTABC7jylbA8wB9YOS95 5WoCmaIl+XA1gQHMcgIIEJOYevlLhRjzmMRkpQKWyUxmJnMCzYzmMydAzWpa05es FMAAtslNbuaylwXAnjVkycoBOEAR5TxnItKpiANEQ5aJSMAzEqDKetrznvjMpz5X EggAOw== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/vert-dot-bg.gif Content-Transfer-Encoding: Base64 R0lGODlhAQACAIABAJmZmf///yH5BAEAAAEALAAAAAABAAIAAAICRAoAOw== ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/star-large.gif Content-Transfer-Encoding: Base64 R0lGODlhEQB7AvcfAP7++/75w8vn9fbSdP79o/7jnurUImqy1rXc75TL5kym0+O1 MiuRxSiEtv//3//dhOm8RvzOTtqnLer0+uDAI3/B4fbuTsSVJ9vt97F6JtOwG6XN 4422z7yNIcTZ5v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAAfACwAAAAAEQB7 AgAI/wA/CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJ kyhTqlzJsqXLlzBjypxJs6bNmzhz6vS44cAEhwoqHGiIoAIABj8XVhAAQMGGgwAS SK2gAMCEBAqkJkAwEIMCBADCThgrAAGCAw08DETwFYPbtxjQDiXoFQHcuA3mFvQq oG9fBhwQCjjgt69ThBW2HghaVAHCAwcYNOAQOTKGgwkmJ8V7eafnz6BDix5NurTp 06hTq17NurXr17BjV3QQIAAAhgAIUDBA4LZCBwYGSKDgYCEBA7Y19C4IgDYBAhYW OABwgffz6R8cWDBggAKFAQEKQP9Y4J2CheLAFxQIC6CA+wIPHkjIQOBDbgML4uuP LzwDhQACOXAcBAMUaOB8yPlm33ERFNggBBkkWBCDEVRY4QXnGUTAAhEsIIEEHC6g AYATaiBBBx10B+IF9ZWYIgEBQKfBBSQSJGAAxQVYW46y9ejjj0AGKeSQRBZp5JFI Jqnkkqj1lBRDQemlUFFHPZnQUk09ZVBUU1V1VVZScSVQXeyNNUFZZ6W1Vlt34SXl B3XdJddBfBUGmGCEFXbYQYmdxRhVj0U2WWUMdFZQZhxshpahTDbq6KOQRirppJRW aumlmGYakgO0KZgQAAEYEMFyv1kg3gA8IhRABLZBQOpAzdX69hwEYUlgQYw43hZj BKJCUEBtA0AAQQSuohesbWG99x4EFxR33wDKKssseDpa4Ct87j3A7AO2wUpAg/sN gCF2BIVqoIG+pioQAQQG2y4ExGkorAQXDECBsBDUOBAB4g5AgHMQSKBudrUpyCm5 mias8MIMN+zwwxBHLPHEFFesqQeJOpQBB4ExhPEEGViJEAfrcQwVxgNwbNUGGWC8 gVpjtmxVABiM5YEHBXDQ8kAetFyzWwFMgPHGe3GA888Y6OyYQTnj7DTRB2FcgAcY UG3yQRAYrbPRF3RsEMcZbLz1zl9v3BnGDYhs8dpst+3223DHLffcdNdt92sBAQAh +QQJAAAfACwAAAAAEQB7AgAI/wA/CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgz atzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6vS44cAEhwoqHGiI oAIABj8XVhAAQMGGgwASSK2gAMCEBAqkJkAwEIMCBADCThgrAAGCAw08DETwFYPb txjQDiXoFQHcuA3mFvQqoG9fBhwQCjjgt69ThBW2HghaVAHCAwcYNOAQOTKGgwkm J8V7eafnz6BDix5NurTp06hTq17NurXr17BjV3QQIAAAhgAIUDBA4LZCBwYGSKDg YCEBA7Y19C4IgDYBAhYWOABwgffz6R8cWDBggAKFAQEKQP9Y4J2CheLAFxQIC6CA +wIPHkjIQOBDbgML4uuPLzwDhQACOXAcBAMUaOB8yPlm33ERFNggBBkkWBCDEVRY 4QXnGUTAAhEsIIEEHC6gAYATaiBBBx10B+IF9ZWYIgEBQKfBBSQSJGAAxQVYW46y 9ejjj0AGKeSQRBZp5JFIJqnkkqgVpeBCCRzAFUMYJDDYkwiZNQFhCE2AgFQKCDCB UFIxRdBgG4g1llmLPTUQAIMJANdVDaRpUJxvIcCAXsxtUAEGckKWlEEAbGClnBVU MChzFTS2VVVdLpaXApQKgBAAaGEAAAYeNGApk6CGKuqopJZq6qmopqrqqqyS1Bx2 CzX/VyGsCeU2AATrLeQAeAEMQKuNzkXggAMUwIjjkwx+F96tEERAAI8fPBCBbQCE 9x4EENT4QQANvvfeABeAR1BuFgzgLbi+YplbBPtJAF5YzBHQoIEEQvtmAQ8SeKu2 bxIAwYfMZnuQgOE+S4Bw/ArUHI7oDYtlqxBHLPHEFFds8cUYZ6zxxhyv6gEHiyqU AQeBMfTxBBmEfBAH65EM1ccDkGzVBhl8vIFaAmFQs1UBYDCWBx4UwEHNA3lQs89u BTDBxyPvxUHQSGMwtGMGCR301U0f9HEBHnAqdckGQfD00E9fAHZBJGcwMtlEG0R2 Zx83oHLHdNdt991456333nz3Bu33364FBAAh+QQJAAAfACwAAAAAEQB7AgAI/wA/ CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJ sqXLlzBjypxJs6bNmzhz6vS44cAEhwoqHGiIoAIABj8XVhAAQMGGgwASSK2gAMCE BAqkJkAwEIMCBADCThgrAAGCAw08DETwFYPbtxjQDiXoFQHcuA3mFvQqoG9fBhwQ Cjjgt69ThBW2HghaVAHCAwcYNOAQOTKGgwkmJ8V7eafnz6BDix5NurTp06hTq17N urXr17BjV3QQIAAAhgAIUDBA4LZCBwYGSKDgYCEBA7Y19C4IgDYBAhYWOABwgffz 6R8cWDBggAKFAQEKQP9Y4J2CheLAFxQIC6CA+wIPHkjIQOBDbgML4uuPLzwDhQAC OXAcBAMUaOB8yPlm33ERFNggBBkkWBCDEVRY4QXnGUTAAhEsIIEEHC6gAYATaiBB Bx10B+IF9ZWYIgEBQKfBBSQSJGAAxQVYW46y9ejjj0AGKeSQRBZp5JFIJqnkkqgJ YJRDg3W2EABmbaBgQhMg4GRSB2WZwAEbTHBABRtgcKVARYFlFQZnKaAWc3G9lSUD Hpy5VgUTuKWAXlBthYEACkjZp11ncXkQBlI5hadCeC32FaNOTTDYU0xWaumlmGaq 6aacdurpp6CGWlJz2E0JQIGlJtTcABDYNmV44dnyOZADtD1QQAAUwBiWQQVs12oB rEZAAI8DPQAeAOG5R2CNAwVgwQDvAXvBrQYhW6B7DxCY6kDNETAAfwvYJisADzRY IATEMgcsBAS2quoDHrIKQQGqFiDBrQRIwCxztKFHq6gAByzwwAQXbPDBCCes8MIM D+wBB4YqlAEHgTH08AQZRHwQB+tRDNXDA1Bs1QYZPLzBmx9gULJVAWAwlgceFMBB yQN5ULLLbgUwwcMT78VBzDhjMLNjvP5cQMw2V2zQw0dj4IHQShcEwc8z/3xB1ARR nMHEVdNsUNWdPdyAxg2XbfbZaKet9tpst+3223C7FhAAIfkECQAAHwAsAAAAABEA ewIACP8APwgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKk yZMoU6pcybKly5cwY8qcSbOmzZs4c+r0uOHABIcKKhxoiKACAAY/F1YQAEDBhoMA EkitoADAhAQKpCZAMBCDAgQAwk4YKwABggMNPAxE8BWD27cY0A4l6BUB3LgN5hb0 KqBvXwYcEAo44LevU4QVth4IWlQBwgMHGDTgEDkyhoMJJifFe3mn58+gQ4seTbq0 6dOoU6tezbq169ewY1d0ECAAAIYACFAwQOC2QgcGBkig4GAhAQO2NfQuCIA2AQIW FjgAcIH38+kfHFgwYIAChQEBCkD/WOCdgoXiwBcUCAuggPsCDx5IyEDgQ24DC+Lr jy88A4UAAjlwHAQDFGjgfMj5Zt9xERTYIAQZJFgQgxFUWOEF5xlEwAIRLCCBBBwu oAGAE2ogQQcddAfiBfWVmCIBAUCnwQUkEiRgAMUFWFuOsvXo449ABinkkEQWaeSR SCap5JKoTQCWQxMY5RAGGyTFUFkCMIRBAhUUhYCVB22wgVWDPZVQVBhMIIACYB5U 1lWBLTTBBhhU0JlCc255Z0JbHlBBmwd5tViWC8VFpVpMJqrooow26uijkEYq6aSU VmpSc9jhVsAACirU3gA8ekpAAbYtJKB74IWV0ADfFUBBBASEyloQqO0FUGCNBsX3 ngQFyEqQrQ9sCkGmUD0wwAMQrNcpc8YWuJ6nxkKQ7LLMCSfts2feWiC1BGHqraXg hivuuOSWa+656Kar7rrsjusBB4AilAEHcS707gQZxFsQB+vRC9W7A9Br1QYZvLsB oh9gULBVAaQ5gQceFMBBwQN5UHCabgXw8MT1CoQBBxFj/HEGjhkkccQoz4vQuwV4 gIHL/h4EAcgce3BBxwTRm8G8HFNsEMedvduAvu0WbfTRSCet9NJMN+3001CzFhAA IfkECQAAHwAsAAAAABEAewIACP8APwgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsY M2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+r0uOHABIcKKhxo iKACAAY/F1YQAEDBhoMAEkitoADAhAQKpCZAMBCDAgQAwk4YKwABggMNPAxE8BWD 27cY0A4l6BUB3LgN5hb0KqBvXwYcEAo44LevU4QVth4IWlQBwgMHGDTgEDkyhoMJ JifFe3mn58+gQ4seTbq06dOoU6tezbq169ewY1d0ECAAAIYACFAwQOC2QgcGBkig 4GAhAQO2NfQuCIA2AQIWFjgAcIH38+kfHFgwYIAChQEBCkD/WOCdgoXiwBcUCAug gPsCDx5IyEDgQ24DC+Lrjy88A4UAAjlwHAQDFGjgfMj5Zt9xERTYIAQZJFgQgxFU WOEF5xlEwAIRLCCBBBwuoAGAE2ogQQcddAfiBfWVmCIBAUCnwQUkEiRgAMUFWFuO svXo449ABinkkEQWaeSRSCap5JKoAcCUQwCABaWUDU2AQFIMJbDBBlgqxFQFTzF0 ZQKdLdRXAl0mhAECHiio0JpPMiTAUm4mxNYGdSLkwZ5pMunnn4AGKuighBZq6KGI JqroSM3liRAADzgK1QA8LuRAAZUqRIB72C0EgXgEZHoQbQWAx9ADpVJ6qni2MZRq WK4WpyhpQeINMCtBAywAgagHDVDqrQM5MB2wixZr7LHIJqvsssw26+yz0EZbqAcc 9IlQBhwExhC1E2RgbUEcrJctVNQOkK1VG2RA7QZqCYSBulYFgMFYexbAgboDeaDu vG4FMAG12O7FgQcF8IvBvY4ZZC/BDAd8ELUFeICBxOMeBMHA9w58gbYGZZsBthnj 2zG2nVHbwLfSpqzyyiy37PLLMMcs88w0sxYQACH5BAUAAB8ALAAAAAARAHsCAAj/ AD8IHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOq XMmypcuXMGPKnEmzps2bOHPq9LjhwASHCiocaIigAgAGPxdWEABAwYaDABJIraAA wIQECqQmQDAQgwIEAMJOGCsAAYIDDTwMRPAVg9u3GNAOJegVAdy4DeYW9Cqgb18G HBAKOOC3r1OEFbYeCFpUAcIDBxg04BA5MoaDCSYnxXt5p+fPoEOLHk26tOnTqFOr Xs26tevXsGNXdBAgAACGAAhQMEDgtkIHBgZIoOBgIQEDtjX0LgiANgECFhY4AHCB 9/PpHxxYMGCAAoUBAQpA/1jgnYKF4sAXFAgLoID7Ag8eSMhA4ENuAwvi648vPAOF AAI5cBwEAxRo4HzI+WbfcREU2CAEGSRYEIMRVFjhBecZRMACESwggQQcLqABgBNq IEEHHXQH4gX1lZgiAQFAp8EFJBIkYADFBVhbjrL16OOPQAYp5JBEFmnkkUgmqeSS qU2gIENOPoTBkwsJkFRDCQgg5VMOCaCWQwho2aWYDQnQWUMbXMnQUg95cCaTcMYp 55x01mnnnXjmqeeefKJE5UI8NhQoQ4MutN5DAxSaUAE1MgTeQ4c6FGlDkzJU6UID /Lmopghh1+enoIYq6qiklmrqqaimquqqonrAgZoKZXbAQWAMuTpBBrAexMF6s0Ll 6gCzWrVBBq5u8OUHGBBrVQAYjOWBBwVwQOxAHhDbrFsBTOCqrHtxAO21GEjrmEHR Qmsutwe5WoCbbvZ6EATeSuvtBbQaNGsGsso7rb2yduZqA7myKvDABBds8MEIJ6zw wgw37FpAACH5BAUAAB8ALAcALgEFAHIAAAiSAAEI+EAQAAKCHwwinHCQYIINGyZ8 EACgwoYPCCYkwDBRQAKJGBB4APAhJMWJFU4iULCBpIcPHiQinEmzps2bOHPq3Mmz p8+fQIMKHUq0qNGjSJMqXaoUgAOEAB6QTDgAoYMCCAlgdQAAQgEIBBw4CPBhQIAH WAc4QAshAIACA6q+jUvwa9WyCyA8HQCXoNipAQEAIfkEBQAAHwAsBQAuAQgAcgAA CMQAP3yYgECgwYEVDgrEsGGCQgEfIC5MUAFBRYcbNgCYIODAhg8AEmCIqMBhRAQO ORicsAFDhZECWWIQaXDmgQomP2BQcECBRJ0HGHpQSLSo0aNIkypdyrSp06dQo0qd SrWq1atYs2rdyrWr169gw4oNC8ABUQAFBihEe5bAhwAABDogUODDgAAgB1BQSyEC AQcDHKDFe/fBg7oFJBRwEECtXQiCATwY8ABCXQCSHReIm/mDZc4DJED4sDnvW7uc zZYV/CEgACH5BAUAAB8ALAMALgELAHIAAAj+AD8I/CCgwsCDAgUcwIBQIAAECDYA aDgBQcEJAysmOLBhwoEKGzA8rIBg4gcMCA4o8AAAw8KTFRmwFIigwgQMGBQcOAgg AQKCChgO7PkzJcaBGBJ8ULDB5kGXDQQq+ImU6QSFGxpq3cq1q9evYMOKHUu2rNmz aNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+4Ewd8cGByqIMBEAIUdhigQOODDhwE ePAhAAUCAT4AKGDBQOIPiCMQcPBggOLMBQpAMB3AwoACAwdccAwggGDYlAcQBuCA wIDcCzJPBPAgwkAIDoYWQAz6s8MHC0B/gADbYQEJsAlIyOxQMmSBAQEAIfkECQAA HwAsAgAuAQ0AcgAACP8APwgUiGCgwYMJPhQ8OBBDAgEHGA4sOOGAAIMTECRUcLHC gQQPAUDcAODDBJMKDyggCfGiQAwTEjQgKbAlBoIMIg4EsKECBgEYDhw4uXPDBwFA K1QgKhBABQQVPiRAoKDkwIoKDHI0COBAAwwAMHho4FKi2bNo06pdy7at27dw48qd S7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLixXgcRIqAlILCAWQcDAnwY4MDq BwcfAhCI4AC0wACdCRiIQGGAQQgRCDh4ECGA58oQIAQIEGGA5YEFBlzIDICAhQ+/ gw/vLHD0A4EPJGT+ULJ4b4OcdxaQPHCA7p0EIEgTeK1ZoAMCw2VvllCeugPUB60G BAAh+QQFAAAfACwAAAAAEQB7AgAI/wA/CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLF ixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CD Ch1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LduuGAxMcKqhw oCGCCgAYpF1YQQAABRsOAkjAt4ICABMSKOCbAMFADAoQAFg8obEABAgONPAwEEFi DJgzY5DcliBiBJo3N+hcELGA06cZcEAo4ADq03gRVih8YO1bBQgPHGDQgMPu3RgO Jug9V3TwssiTK1/OvLnz59CjS5/+1IGDAAAYAghgIAKB7AodWLUoAGGAg4UBImCH 8L0ggOsBCBCAsFiChfgBHGSPH6E7hAIBBDAABBBEwN55DgyI3WIFNOggBBecBwAB Bgzg4IXkXTBAAAJdZ8F/BTzQ4AMQPoDdQBNGMMADLD4wwAUW6FcQdwPUaON/5xU0 X40E8khBjgTNB4EEGlJAIAQc6vjiAARcN58EQA4EH3gfWCcjdVhmqeWWXHbp5Zdg hinmmGSWaeaZaKap5ppstunmm3DGKeecDQUEADs= ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline Content-Type: image/gif Content-Location: http://l.yimg.com/h/28130/images/all/star-border.gif Content-Transfer-Encoding: Base64 R0lGODlhFwB+AtUnAOnp6em8Rv//utvt9/X19dTU1PP2+Mvn9ZrM5Wqy1rfb7v/h lf/+5uvMfv3mq0ym0///2IK/3Xt7e82cKf7YcqCgoP/dhPzOTvztxubz++TOL/36 hiiEtm9vbyuRxf7VZPbuTq+vr7+/v4+Pj7S0tMzMzP///////wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAAAnACwAAAAAFwB+ AgAG/8CTcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4 fE6v2+/4vH7P7/v/gIGCg1cAJYeIiYqJACcABQYmkpOUlZIGBYaRlpyVhiWdJggJ m5yHoQ8RCaGnnAoRJh6lla2WEQcmDwidtQYIvxEPBhkIur8KlLUHD8iSGc8HCgoJ HM0mtSYKzAPc3QPUq5PYJgPb3uC0oJXlB+3tHrDplgcJ7u26luMmEQjTqa8P8qmj lCCBBw6qPBgcIK8SAoSbvnEAkI5iqFCGHlm86KlEo0+LQjIiRLKkyZMoU6pcybKl y5cwY8qcSbOmzZs4c8IBKVLkR/9IHC1h0sSJAQQBGPVJEqDhggAGvAZSYgBiQYAG EKJyEnABg4kASE0NZCCg7IYAkiaAKPs0mToIGy40DbAAA4YGAQJcCLABqqRWDD4E 8CrJgeHDASZk/TuQaYMFDiAvkJy4QdhrYwWAoLvAwmQLiS1cxlyJKwULqC00ULtY nFQTTCnInk3Xr+vSAT7gvYpXQ2vGlc4mnvBBQ16wDScJWE1BwNGziitOLTsVgm1J GTMF7fixp/dGOsOLH0++vPnz6NOrX8++vfv38OOj5Old0c9Z24eWwL/dxKdQo/B3 WyephCNWJ6/EIiBpnNySyy4HXvILAsEMU8yE1jBowjLWPJP/QTTTVDOgJNoo4E03 6IwoSTkmnsOBgcCt84A9B8Aj0Dz12INPcpPw408EAN1YSUEHJbQQj5I8FEFE1GzE mJP9+eeRdlFK2V19IYEn35Zcdunll2CGKeaYZJZp5plookkflofcV6UJ+glo1Ggd vaZcU21FWAlVVmGllSVceYWcnmSZhZYJarF1XStwybVXXXfltVdfAwY22CSHIRZd jLBp8FhkkVE2gWUjkrXZZ5+FNto4pqWmGmtIxjabbLXFmttuDfT2m4aSCDcBccbl RSerzDknAHS7tjndaEZdZyWVUWbkCJuLaJnmtdhmq+223Hbr7bfghivuuOSWa+4d a7L5rhMBbxKQSQnsvimlnZIQUEII8eppSQUS4PunQABIkC+SrhEwArx6fiKCBBUQ AAAJHSBSgFuTAFABwg4DoPEh/Iowor0SZKLxyAF3UAHFlFjsEckhdCABAPmO424F mbwrAcIoU1JAmzVfDKXMFxfA8CEMC0kJwxJEnHQINyNpbwchaOxu0j97VEnGBLCb ddYpTwllUNKmi6W155Zt9tlop6322my37fbbcMctN0tBAAAh+QQJAAAnACwAAAAA FwB+AgAG/8CTcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67 3/C4fE6v2+/4vH7P7/v/gIGCg1cAJYeIiYqJACcABQYmkpOUlZIGBYaRlpyVhiWd JggJm5yHoQ8RCaGnnAoRJh6lla2WEQcmDwidtQYIvxEPBhkIur8KlLUHD8iSGc8H CgoJHM0mtSYKzAPc3QPUq5PYJgPb3uC0oJXlB+3tHrDplgcJ7u26luMmEQjTqa8P 8qmjlCCBBw6qPBgcIK8SAoSbvnEAkI5iqFCGHlm86KlEo0+LQjIiRLKkyZMoU6pc ybKly5cwY8qcSbOmzZs4c8IBKVLkR/9IHC1h0sSJAQQBGPVJEqDhggAGvAZSYgBi QYAGEKJyEnABg4kASE0NZCCg7IYAkiaAKPs0mToIGy40DbAAA4YGAQJcCLABqqRW DD4E8CrJgeHDASZk/TuQaYMFDiAvkJy4QdhrYwWAoLvAwmQLiS1cxlyJKwULqC00 ULtYnFQTTCnInk3Xr+vSAT7gvYpXQ2vGlc4mnvBBQ16wDScJWE1BwNGziitOLTsV gm1JGTMF7fixp/dGOsOLH0++vPnz6NOrX8++vfv38OOj5Old0c9Z24eWwL/dxKdQ r/B3WyejWCNQJwMgQA8rr00iTQb1aDWJAQr88sABBqjyC4ZuUUL/zy4mDJOBNAng M+Ak9BzgDTEcgHgiivV0o4BCB1qCQAQDqFjQRi9OsqGKEUTAnz4ZAtSPMDVSYkCJ HJT4wIVJTkgNQwMowAEu0vVHSXY8bpeRI/X5JN+YZJZp5plopqnmmmy26eabcMYJ ZpiL3KflJZns1wkEv3XUoCQQXHBBnx1awsAGeC3AYFEU2NXAdYVKYpQAcVmnwQZl QYrNBk1p0AAGDux2wQa/YWNBV5KAithgkcJ2QQORTTbZapa1ChsIj8nKnKYNxpWa BRPUmtwkcc1GwVWE6uPAq3nphtywJhw63G6sQgtbsM4hOsFojHVJlnXR8mkJl3f6 59GcdI4kxOe67Lbr7rvwxivvvPTWa++9+OarLxr0pfsTAeUSkCfA5Zr7pwkElBAC wWKFUoEEC0soEAASMGwtYwSMUILFJ34iggQVEAAACR0gUkCkAFSwMcIAtPzJwyKc mLAEmbjssgQdVGBryh7ZHEIHEgDA8DgCV5BJnhKsbKsJBRyiUQEqd0m0ygWAfAjI UUoCMs4l4BxC0tAm3EEILQuMs9QeVSKy0AAT4LbF5N75Zb90grfv3XjnrffefPft 99+ABy744IQDEgQAIfkECQAAJwAsAAAAABcAfgIABv/Ak3BILBqPyKRyyWw6n9Co dEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoNXACWH iImKiQAnAAUGJpKTlJWSBgWGkZaclYYlnSYICZuch6EPEQmhp5wKESYepZWtlhEH Jg8InbUGCL8RDwYZCLq/CpS1Bw/IkhnPBwoKCRzNJrUmCswD3N0D1KuT2CYD297g tKCV5Qft7R6w6ZYHCe7tupbjJhEI06mvD/Kpo5QggQcOqjwYHCCvEgKEm75xAJCO YqhQhh5ZvOipRKNPi0IyIkSypMmTKFOqXMmypcuXMGPKnEmzps2bOHPCASlS5Ef/ SBwtYdLEiQEEARj1SRKg4YIABrwGUmIAYkGABhCichJwAYOJAEhNDWQgoOyGAJIm gCj7NJk6CBsuNA2wAAOGBgECXAiwAaqkVgw+BPAqyYHhwwEmZP07kGmDBQ4gL5Cc uEHYa2MFgKC7wMJkC4ktXMZciSsFC6gtNFC7WJxUE0wpyJ5N16/r0gE+4L2KV0Nr xpXOJp7wQUNesA0nCVhNQcDRs4orTi07FYJtSRkzBe34saf3RjrDix9Pvrz58+jT q1/Pvr379/Djo+TpXdHPWduHlsC/3cSnUAdEwN9tndDDkFacGCDNLghakoECAQ5I GiUKjoJABgnwMwB+47yC/8wwA/hjDXDrJNDNgx6MSGIlr2TAzQPhJEdhPwMsc6CM k/iiQIgJZCAWJwP8oouAP1oiUQIPMFPkOroY8A2D0vVHSXYb9ZeRI/X5JN+WXHbp 5ZdghinmmGSWaeaZaKaJZZaL3CflJZns1wkEv3X0GiUUfHAdjpNAQMFgrNy5lAMY LBBoJUYJYAGhGlAnUCUOgGAcBg7g5VSd46jmFaWGXUUYgcqB0IBhkK22wGgTUiLA BxR8dtWeqVKywQeo4YXqipQswCoFeMEa6yQL7CbYp25xAtoEuzmwJCUOTHDqBhMQ 61qVkhwFlVGwUvmmfx6tyeZIaoYr7rjklmvuueimq7nuuuy26+678KJB37c/EbAt AXHauy23gppAQAkh6LtsJRVIEHCDFUkgMJ+METBCCQuD+okIElRAAAAkdIBIAcVi VwHE/gIg8icFiwDqvxJkMvLIEnRQQceTAPDxygCE0IEEAAg8Dr4VZBKnBCDDPEkB h2hUwMw4EvBxARUfUvGjlVTccgkthwB00iV0EILI+LZMbdGVXJyzvQSUvbC2b145 L5vgxev223DHLffcdNdt991456333oAEAQAh+QQJAAAnACwAAAAAFwB+AgAG/8CT cEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW673/C4fE6v2+/4 vH7P7/v/gIGCg1cAJYeIiYqJACcABQYmkpOUlZIGBYaRlpyVhiWdJggJm5yHoQ8R CaGnnAoRJh6lla2WEQcmDwidtQYIvxEPBhkIur8KlLUHD8iSGc8HCgoJHM0mtSYK zAPc3QPUq5PYJgPb3uC0oJXlB+3tHrDplgcJ7u26luMmEQjTqa8P8qmjlCCBBw6q PBgcIK8SAoSbvnEAkI5iqFCGHlm86KlEo0+LQjIiRLKkyZMoU6pcybKly5cwY8qc SbOmzZs4c8IBKVLkR/9IHC1h0sSJAQQBGPVJEqDhggAGvAZSYgBiQYAGEKJyEnAB g4kASE0NZCCg7IYAkiaAKPs0mToIGy40DbAAA4YGAQJcCLABqqRWDD4E8CrJgeHD ASZk/TuQaYMFDiAvkJy4QdhrYwWAoLvAwmQLiS1cxlyJKwULqC00ULtYnFQTTCnI nk3Xr+vSAT7gvYpXQ2vGlc4mnvBBQ16wDScJWE1BwNGziitOLTsVgm1JGTMF7fix p/dGOsOLH0++vPnz6NOrX8++vfv38OOj5Old0c9Z24eWwL/dxKdQGVgjVigGRMDf bZ0MgEAGrLxGSTS4aGWJghG8osCBSv1iQgb07CL/ECe+DMDhAwx+yEk0xMRjolAI DBABQwOC2GKLEk44SgQlrljJMgk8EKGOlHwDQD9RbdQfdh5pd6R/HjlSn0/yRSnl lFRWaeWVWGap5ZZcdunll04+uch9S5qg34EmGJWUg5M48MFFSkmyAFYNhrKBA4TF WMlRkFlWIyUUaNCAA005B6QkH0CFZwMN5IlgJRZQYNgCEyzwG3CWCPCBZ3hd9yik p9H1JyUWfEDBoKNOolpeC6QqyWp5OeCqCYwu10CRnECQlXWcZGfkdhmFKeZIYBZr 7LHIJqvsssw26+yz0EYr7bTUokHfsD8RUCYBmZSgbZlMsmkCASWE8K2ellQgl4G5 sx4CgATnJpcOASN4q+cnIkhQAQEAkNABIgW4NQkAFdjLLwAIH6KuCI+SK0EmCEf8 bgcVCEwJwR5JHEIHEgBw7jjcVpBJtxLYazElBbg7csG/glxwAfoeou+h+krwr80h lCzvuCV0EALC3NrcskeVHEyAtkcffXGSvwYV7LViglft1FRXbfXVWGet9dZcd+31 12ADEgQAIfkECQAAJwAsAAAAABcAfgIABv/Ak3BILBqPyKRyyWw6n9CodEqtWq/Y rHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoNXACWHiImKiQAn AAUGJpKTlJWSBgWGkZaclYYlnSYICZuch6EPEQmhp5wKESYepZWtlhEHJg8InbUG CL8RDwYZCLq/CpS1Bw/IkhnPBwoKCRzNJrUmCswD3N0D1KuT2CYD297gtKCV5Qft 7R6w6ZYHCe7tupbjJhEI06mvD/Kpo5QggQcOqjwYHCCvEgKEm75xAJCOYqhQhh5Z vOipRKNPi0IyIkSypMmTKFOqXMmypcuXMGPKnEmzps2bOHPCASlS5Ef/SBwtYdLE iQEEARj1SRKg4YIABrwGUmIAYkGABhCichJwAYOJAEhNDWQgoOyGAJImgCj7NJk6 CBsuNA2wAAOGBgECXAiwAaqkVgw+BPAqyYHhwwEmZP07kGmDBQ4gL5CcuEHYa2MF gKC7wMJkC4ktXMZciSsFC6gtNFC7WJxUE0wpyJ5N16/r0gE+4L2KV0NrxpXOJp7w QUNesA0nCVhNQcDRs4orTi07FYJtSRkzBe34saf3RjrDix9Pvrz58+jTq1/Pvr37 9/Djo+TpXdHPWduHlsC/3cSnUAbgwsprlBhgjVgAKsDfbZ0YuCBwnfyCQAZadYIL PxW6QgxDCFp4/wACDyolyQDSDBgKiQJ2yMkBt5jYiTYgZmiJNApGtVF/2HmkHY7+ eeRIfT7JJ+SQRBZp5JFIJqnkkkw26eSTUP4I5CL38WiCfg+acF1HBFJiwUUiStLA lm6FwsACvyVniQCTkQkhJwE4wJebYUKAwQINEKZmJRY40ABWKlri2WAyVrIABQ24 yMkCuilqiVWJFkrJbm6S1kkDfg54IyXWVZrdpkFlJOWUI0Vp6qmopqrqqqy26uqr sMYq66y01ooGfaT+RICVBGRSwq5W9tilCQSUEAKwgVZSgQTHSsoYABIgu6drBIzw q4qfiCBBBQQAQEIHiBRQJnYVXNstAOgesnKsCAwSW4IEmaArL7QdVDDuJACUOy8A IXQgAQDIjtNrBZn4KsG1905SwCEaFaDvngSUW8C2h2wrkCXbSgCuxiEcDHEJHYSA bq8ab8pwJecSsKvKKlPyqZWi4joleLbWbPPNOOes88489+zzz0AHLTQgQQAAIfkE BQAAJwAsAAAAABcAfgIABv/Ak3BILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4 TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoNXACWHiImKiQAnAAUGJpKTlJWS BgWGkZaclYYlnSYICZuch6EPEQmhp5wKESYepZWtlhEHJg8InbUGCL8RDwYZCLq/ CpS1Bw/IkhnPBwoKCRzNJrUmCswD3N0D1KuT2CYD297gtKCV5Qft7R6w6ZYHCe7t upbjJhEI06mvD/Kpo5QggQcOqjwYHCCvEgKEm75xAJCOYqhQhh5ZvOipRKNPi0Iy IkSypMmTKFOqXMmypcuXMGPKnEmzps2bOHPCASlS5Ef/SBwtYdLEiQEEARj1SRKg 4YIABrwGUmIAYkGABhCichJwAYOJAEhNDWQgoOyGAJImgCj7NJk6CBsuNA2wAAOG BgECXAiwAaqkVgw+BPAqyYHhwwEmZP07kGmDBQ4gL5CcuEHYa2MFgKC7wMJkC4kt XMZciSsFC6gtNFC7WJxUE0wpyJ5N16/r0gE+4L2KV0NrxpXOJp7wQUNesA0nCVhN QcDRs4orTi07FYJtSRkzBe34saf3RjrDix9Pvrz58+jTq1/Pvr379/Djo+TpXdHP WduHlsC/3cSnixlcpNQkAbLy2jr83RbKAQkCFwoCuGgVygC7SNhJNAZepECEYl3U /06GCzJkIScIFNhhKLeA2IkCGwnUYn/+eaQdjDF2V19I4Mmn44489ujjj0AGKeSQ RBZp5JFH0nfjIffRaIJ+DXL030XXJdfJb1YWpWInDmzJCVYjclJXmJY0QJhAHC3g pSVqkllJl25S0uaJoTSw5psGvlhJlZNkp6eUHjmy5CI5ImnooYgmquiijDbq6KOQ RirppJRWeoeSS/5EgJMEZFLCpk7GeKAkBJQQAqh0WlKBBKfGyaQEqGbpGgEjfErn JyJIUAEBAJDQASIFuNVnBbbyCsCxh6wqgoImlCpBJsdGC4AEHVQgLCUAECstACF0 IAEAqI7TaQWZeCqBrddSUkoAk+VqmyUBxBag6yG6olmJrtSWQG0I575bQgchHNsp tS8yWYmxBGyacMLYyvjnRRkJOuhIllZs8cUYZ6zxxhx37PHHIIcs8ktBAAAh+QQF AAAnACwKAC8BBQByAAAGeUDD4UQ0KIgnI1JJRJwQmdPBFHEqMoiB9IAwnAaK41cx lEbKikf3dFR4kfC4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiAxwFiZIDYsnDAsQRAIL C4sBDgEbDBAYJw0YFg6iEBYLAaELFA1ECx+vJ6qzDQEBiw0OsxCRJ0EAIfkECQAA JwAsCAAvAQgAcgAABqfA0ymjEBqFEcPxNEBklodTVNiMKKxKBMKUOSQQJwNiIH08 pYpnxCgeRMjC9tjYTETO5cRjykwAEEVLgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZ mpucnZ6foJ8MEIIOH4ILJ6RHGw4YRhACCw4NAkIUGg0nGhcCEB8MJq4nDRgWFA4n CxMLsafEAQxCxxYBqdMfFCfJ07rWRg0TQtzEJ7a6QqQmENInQQAh+QQFAAAnACwA AAAAFwB+AgAG/8CTcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6 zW673/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5yd np+goaKjpKWmp6ipqqusra6vsLGys7S1iiYmBxEGuCZPuAcJA72/BgoKCMROJhkK ury+TMYICQgZCREIAwZMChEKJgYZAwoJDwpNA8IDA80e6E7e4wMPCdFNBggKAwcP w0/59pXLcI/JAAQIHiDYVXCJOg7mzjVUQg+BAXXJfvXaqHEjriclQooMaaukyZMo U6pcybKly5cwY8ocMnJkR48aIUDguMwEhZwPDJQ1MQGBQgAMQpmYEOAAw4KkSRhA EGChqQYBAiYecQBCw1EHDQJcEACBiYUGSDE4WBsALRMBIBqsXQB2wgIBTQR8oLBg gYW2DJ5s+GDhbICsTxbspRA2aOKwAT4c1Yrk7wTIDihvtStgwwSkT6YGlep4punT qFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uHEjQQAAIfkECQAAJwAs BQAvAQ0AcgAABuvAk1CoGBqPiFPxOBwgDgnmsJhJHIwGRfJxMESiTwMUYRpmlIlH EnoVDjIITlLIHhA9USMiMjgMEgkASCcHfhERBlgRChFED4lDBmlGXFgJHANlChxt Up6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMWyEBcXEJ4M Gw0nC8wUGCcNDEYMEAIbytcbJwLeGhfVRgEXGxAWFxhlRg4BARgCFw0OC9H4DRMN AuAgDaJB20fhmhBuFoRY4OdvCDcKQiA2WDbEAbkhDQI0PNEswARz1IYIYLhs30aO AigKURkEACH5BAUAACcALAAAAAAXAH4CAAb/wJNwSCwaj8ikcslsOp/QqHRKrVqv 2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouM jY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLWHJri4CAkG ubhKviYPEQnBwLkKESYevbnHuBEHwgi+SQYI2BEPBhkID9gICkkHDwq5GegHCgoJ HOJICuUD8/QD7QnAA/L19ybH+gcCBvSgzF8SXAcSCAz47ddBExHCJRiW7IFDJLgS JPDAgZiHjQMMYjSBoGMzexwAiDwSrOVFli6NJSlBs6bNmrZy6tzJs6fP159Agwod SrQo0ZtIaT6L+dKILwYQBLRcKkDDBQEMqj00wQDEggANIGgdaULABQwmAkh1hoSB gLcbAuCaAOItViQQNlywGmABBgwNAgS4EGADgyMMPgRAi8uB48cBJkBAUrXBAgeX F2SO3EBAWwEg+i6woNlCZAueD5qlYKG1hQZ0xQKrSqG27b5ZZwf4EBhsYA2yD8aN POGDBsFqVzoVAJuCgKhxJSsvwvXtUwhZpxvdzr279+/gw4sfT768+fPo06tfz769 +/fw48ufT7++/fv48+vfHyYIADs= ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline; filename=answers-fe-es.css Content-Type: text/css; charset=utf-8; name=answers-fe-es.css Content-Location: http://l.yimg.com/h/28130/css/answers-fe-es.css Content-Transfer-Encoding: 8bit html{color:#000;background:#FFF;} body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;} table{border-collapse:collapse;border-spacing:0;} fieldset,img{border:0;} address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;} li{list-style:none;} caption,th{text-align:left;} h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;} q:before,q:after{content:'';} abbr,acronym{border:0;font-variant:normal;} sup{vertical-align:text-top;} sub{vertical-align:text-bottom;} input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;} input,textarea,select{*font-size:100%;} legend{color:#000;} del,ins{text-decoration:none;} body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;} select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif;} table{font-size:inherit;font:100%;} pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;} .yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;} .yui-tt{visibility:hidden;position:absolute;color:#333;background-color:#FDFFB4;font-family:arial,helvetica,verdana,sans-serif;padding:2px;border:1px solid #FCC90D;font:100% sans-serif;width:auto;} .yui-tt-shadow{display:none;} * html body.masked select{visibility:hidden;} * html div.yui-panel-container select{visibility:inherit;} * html div.drag select{visibility:hidden;} * html div.hide-select select{visibility:hidden;} .mask{z-index:1;display:none;position:absolute;top:0;left:0;-moz-opacity:0.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;} .hide-scrollbars,.hide-scrollbars *{overflow:hidden;} .hide-scrollbars select{display:none;} .show-scrollbars{overflow:auto;} .yui-panel-container.show-scrollbars{overflow:visible;} .yui-panel-container.show-scrollbars .underlay{overflow:auto;} .yui-panel-container .underlay{position:absolute;top:0;right:0;bottom:0;left:0;} .yui-panel-container.matte{padding:3px;background-color:#fff;} .yui-panel-container.shadow .underlay{top:3px;bottom:-3px;right:-3px;left:3px;background-color:#000;opacity:.12;filter:alpha(opacity=12);} .yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;} .yui-effect-fade .underlay{display:none;} .yui-panel{visibility:hidden;border-collapse:separate;position:relative;left:0;top:0;font:1em Arial;background-color:#FFF;border:1px solid #000;z-index:1;overflow:hidden;} .yui-panel .hd{background-color:#3d77cb;color:#FFF;font-size:100%;line-height:100%;border:1px solid #FFF;border-bottom:1px solid #000;font-weight:bold;padding:4px;white-space:nowrap;} .yui-panel .bd{overflow:hidden;padding:4px;} .yui-panel .bd p{margin:0 0 1em;} .yui-panel .container-close{position:absolute;top:5px;right:4px;z-index:6;height:12px;width:12px;margin:0;padding:0;background:url(close12_1.gif) no-repeat;cursor:pointer;visibility:inherit;text-indent:-10000em;overflow:hidden;text-decoration:none;} .yui-panel .ft{padding:4px;overflow:hidden;} .yui-simple-dialog .bd .yui-icon{background-repeat:no-repeat;width:16px;height:16px;margin-right:10px;float:left;} .yui-simple-dialog .bd span.blckicon{background:url("blck16_1.gif") no-repeat;} .yui-simple-dialog .bd span.alrticon{background:url("alrt16_1.gif") no-repeat;} .yui-simple-dialog .bd span.hlpicon{background:url("hlp16_1.gif") no-repeat;} .yui-simple-dialog .bd span.infoicon{background:url("info16_1.gif") no-repeat;} .yui-simple-dialog .bd span.warnicon{background:url("warn16_1.gif") no-repeat;} .yui-simple-dialog .bd span.tipicon{background:url("tip16_1.gif") no-repeat;} .yui-dialog .ft,.yui-simple-dialog .ft{padding-bottom:5px;padding-right:5px;text-align:right;} .yui-dialog form,.yui-simple-dialog form{margin:0;} .button-group button{font:100 76% verdana;text-decoration:none;background-color:#E4E4E4;color:#333;cursor:hand;vertical-align:middle;border:2px solid #797979;border-top-color:#FFF;border-left-color:#FFF;margin:2px;padding:2px;} .button-group button.default{font-weight:bold;} .button-group button:hover,.button-group button.hover{border:2px solid #90A029;background-color:#EBF09E;border-top-color:#FFF;border-left-color:#FFF;} .button-group button:active{border:2px solid #E4E4E4;background-color:#BBB;border-top-color:#333;border-left-color:#333;} .yui-override-padding{padding:0!important;} .yui-calcontainer{position:relative;padding:5px;background-color:#F7F9FB;border:1px solid #7B9EBD;float:left;_overflow:hidden;} .yui-calcontainer iframe{position:absolute;border:none;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0;top:0;} .yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px;} .yui-calcontainer.multi{padding:0;} .yui-calcontainer.multi .groupcal{padding:5px;background-color:transparent;z-index:1;float:left;position:relative;border:none;} .yui-calcontainer .title{font:100% sans-serif;color:#000;font-weight:bold;margin-bottom:5px;height:25px;position:absolute;top:3px;left:5px;z-index:1;} .yui-calcontainer .close-icon{position:absolute;overflow:hidden;text-indent:-10000em;right:3px;top:3px;border:none;z-index:1;} .yui-calcontainer .calclose{background:url("calx.gif") no-repeat;width:17px;height:13px;cursor:pointer;} .yui-calendar{font:100% sans-serif;text-align:center;border-spacing:0;border-collapse:separate;position:relative;} .yui-calcontainer.withtitle{padding-top:1.5em;} .yui-calendar .calnavleft{position:absolute;overflow:hidden;text-indent:-10000em;cursor:pointer;top:2px;bottom:0;width:9px;height:12px;left:2px;z-index:1;background:url("callt.gif") no-repeat;} .yui-calendar .calnavright{position:absolute;overflow:hidden;text-indent:-10000em;cursor:pointer;top:2px;bottom:0;width:9px;height:12px;right:2px;z-index:1;background:url("calrt.gif") no-repeat;} .yui-calendar td.calcell{padding:.1em .2em;border:1px solid #E0E0E0;text-align:center;} .yui-calendar td.calcell a{color:#003DB8;text-decoration:none;} .yui-calendar td.calcell.today{border:1px solid #000;} .yui-calendar td.calcell.oom{cursor:default;color:#999;background-color:#EEE;border:1px solid #E0E0E0;} .yui-calendar td.calcell.selected{color:#003DB8;background-color:#FFF19F;border:1px solid #f90;} .yui-calendar td.calcell.calcellhover{cursor:pointer;color:#FFF;background-color:#f90;border:1px solid #f90;} .yui-calendar td.calcell.calcellhover a{color:#FFF;} .yui-calendar td.calcell.restricted{text-decoration:line-through;} .yui-calendar td.calcell.previous{color:#CCC;} .yui-calendar td.calcell.highlight1{background-color:#cf9;} .yui-calendar td.calcell.highlight2{background-color:#9cf;} .yui-calendar td.calcell.highlight3{background-color:#fcc;} .yui-calendar td.calcell.highlight4{background-color:#cf9;} .yui-calendar .calhead{border:1px solid #E0E0E0;vertical-align:middle;background-color:#FFF;} .yui-calendar .calheader{position:relative;width:100%;text-align:center;} .yui-calendar .calheader img{border:none;} .yui-calendar .calweekdaycell{color:#666;font-weight:normal;text-align:center;width:1.5em;} .yui-calendar .calfoot{background-color:#EEE;} .yui-calendar .calrowhead,.yui-calendar .calrowfoot{color:#666;font-size:9px;font-style:italic;font-weight:normal;width:15px;} .yui-calendar .calrowhead{border-right-width:2px;} .yui-calendar a.calnav{_position:relative;padding-left:2px;padding-right:2px;text-decoration:none;color:#000;} .yui-calendar a.calnav:hover{border:1px solid #036;background-color:#69c;background:url(calgrad.png) repeat-x;color:#fff;cursor:pointer;} .yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;display:none;margin:0;padding:0;left:0;top:0;width:100%;height:100%;_width:0;_height:0;background-color:#000;opacity:0.25;*filter:alpha(opacity=25);} .yui-calcontainer .yui-cal-nav{position:absolute;z-index:3;display:none;padding:0;top:1.5em;left:50%;width:12em;margin-left:-6em;border:1px solid #7B9EBD;background-color:#F7F9FB;font-size:93%;} .yui-calcontainer.withtitle .yui-cal-nav{top:3.5em;} .yui-calcontainer .yui-cal-nav-y,.yui-calcontainer .yui-cal-nav-m,.yui-calcontainer .yui-cal-nav-b{padding:2px 5px 2px 5px;} .yui-calcontainer .yui-cal-nav-b{text-align:center;} .yui-calcontainer .yui-cal-nav-e{margin-top:2px;padding:2px;background-color:#EDF5FF;border-top:1px solid black;display:none;} .yui-calcontainer .yui-cal-nav label{display:block;font-weight:bold;} .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto;} .yui-calcontainer .yui-cal-nav-y input.yui-invalid{background-color:#FFEE69;border:1px solid #000;} .yui-calcontainer .yui-cal-nav-yc{width:3em;} .yui-calcontainer .yui-cal-nav-b button{font-size:93%;text-decoration:none;cursor:pointer;background-color:#79b2ea;border:1px solid #036;border-top-color:#FFF;border-left-color:#FFF;margin:1px;} .yui-calendar .calbody a:hover{background:inherit;} p#clear{clear:left;padding-top:10px;} .updates-disclosure{background-color:#f1f1f1;margin:10px 0;padding:0 10px 0 10px;} .updates-disclosure .hd{padding:12px 0 10px 0;font-family:Arial "Sans-serif";color:#333;font-size:13px;} .updates-disclosure .hd a{font-size:11px;float:right;} .updates-disclosure .disc-in-msg{width:70%;float:left;} .updates-disclosure .disc-in-mng{width:30%;float:right;} .updates-disclosure .broadcasters{clear:both;padding-bottom:15px;} .updates-disclosure .broadcasters span.cont{padding-right:11px;} .updates-disclosure .broadcasters img{vertical-align:middle;padding:4px;} .updates-disclosure .broadcasters img.y{padding-right:0;} .updates-disclosure .broadcasters input{padding-right:4px;} .updates-disclosure .broadcasters .cont>a{padding-right:4px;font:bold 11px arial;} .updates-disclosure a,.updates-disclosure a:visited{text-decoration:none;} .updates-disclosure a:hover,.disc-inline-perm-ovly li a:hover{text-decoration:underline;} .disc-inline-perm-c{display:inline;} .disc-inline-perm-act img{cursor:pointer;cursor:hand;padding:0;} .disc-inline-perm-ovly{background-color:#fff;border:1px solid #ccc;padding:8px;} .disc-inline-perm-ovly li a{text-decoration:none;display:block;padding-left:8px;} .disc-inline-perm-ovly li{_height:1%;_width:1%;} .disc-inline-perm-ovly li.selected a{background-image:url(http://l.yimg.com/a/i/us/soc/updts/dlg_sprt2.gif);background-position:0 -195px;background-repeat:no-repeat;} .disc-hide{display:none;} .disc-tooltip-knob,#yup-dialog .container-close{background-image:url(http://l.yimg.com/a/i/us/soc/updts/dlg_sprt2.gif);} .disc-tooltip-knob{background-repeat:no-repeat;background-position:-4px -61px;height:11px;width:20px;position:absolute;display:none;} .yui-overlay .bd .disc-tooltip{border:1px solid #666;width:250px;} .yui-overlay .bd .disc-tooltip div{padding:10px;font-family:Arial "Sans-serif";font-size:12px;color:#000;border:2px solid #ccc;background-color:#fff;} body.yui-skin-sam .mask{background-color:#000;opacity:.6;filter:alpha(opacity=60);} #yup-dialog_c.shadow{*padding:0;} #yup-dialog_c .underlay{opacity:.50;filter:alpha(opacity=50);top:-10px;left:-10px;bottom:-10px;right:-10px;margin:0;_right:0;_bottom:0;_margin:0;_padding:10px;_zoom:1;} #yup-dialog{border:1px solid #447499;text-align:left;background-color:#f0f4f8;} #yup-dialog strong{font-weight:bold;} #yup-dialog .hd,#yup-dialog .hd span,.updates-disclosure .hd span,#yup-dialog .button-group button{background-image:url(http://l.yimg.com/a/i/us/soc/updts/disclosure.png);background-repeat:repeat-x;} #yup-dialog .container-close{background-position:-8px -8px;top:10px;height:16px;} #yup-dialog .container-close:hover{background-position:-6px -30px;} #yup-dialog .hd{margin:0;border:0;border-bottom:1px solid #d7dee6;font-family:Arial "Sans-serif";color:#3f6685;font-size:16px;background-color:inherit;background:none;} #yup-dialog .bd{margin:0;padding:0 17px 0 17px;border:0;font-size:92%;background-color:#F9F9F9;color:#333;background-color:inherit;} #yup-dialog .bd .result{font-family:Arial "Sans-serif";color:#3f3f3f;font-size:14px;padding:14px 0 18px 0;} #yup-dialog .bd .ebcstrs_c{padding:10px;background-color:#e3e9ef;} #yup-dialog .bd .ebcstrs_c .disc-ov-msg{font-family:Arial "Sans-serif";color:#333;font-size:13px;float:left;width:70%;} #yup-dialog .bd .ebcstrs_c .disc-ov-mng{float:right;width:30%;} #yup-dialog .bd .ebcstrs{clear:both;} #yup-dialog .bd .ebcstrs_c .disc-ov-msg a{font-family:Arial "Sans-serif";font-size:11px;float:right;} #yup-dialog .bd .ebcstrs img{margin-right:4px;} #yup-dialog .bd .unbcstrs_c{padding:15px 0 0 0;} #yup-dialog .bd .unbcstrs_c a{font-family:Arial "Sans-serif";font-size:11px;font-style:bold;} #yup-dialog .bd a,#yup-dialog .bd a:visited{text-decoration:none;color:#247cd4;} #yup-dialog .bd a:hover{text-decoration:underline;} #yup-dialog .bd .unbcstrs_c img{vertical-align:middle;padding:0 4px 0 4px;} #yup-dialog .bd .unbcstrs_c>div{margin-bottom:10px;} #yup-dialog .bd form{margin-top:22px;} #yup-dialog .ft{margin:0;padding:0;border:0;font-size:92%;background-color:inherit;} #yup-dialog .button-group button{margin:0 15px 15px;cursor:hand;cursor:pointer;padding:3px 14px;border:1px solid #FD9A11;background-color:#fbd86d;background-position:0 -55px;font:bold 92% arial;} #yup-show{padding:0 0 5px 0;} #yup-show label{vertical-align:middle;padding:0 5px;font-family:Arial "Sans-serif";color:#666;font-size:12px;} #yup-show input{vertical-align:middle;} html{background:#fff url(http://l.yimg.com/h/28130/images/all/main-bg.gif);} body{color:#333;background:transparent;} textarea{font-family:arial,sans-serif;} h1{color:#666;font-weight:bold;font-size:161.6%;margin:0.7em 0;} h2{color:#666;font-weight:bold;font-size:123.1%;margin-bottom:0.5em;} p{margin-bottom:1.07em;} a{color:#069;text-decoration:none;} a:hover{text-decoration:underline;} #yan{border:1px solid #ccc;border-width:0 1px 1px 1px;background:#fff;width:750px;margin:0 auto 1em auto;overflow:hidden;z-index:1;position:relative;} #yan-wrap{padding:0 12px;zoom:1;} .no-breadcrumb #yan-wrap,.seo #yan-wrap{margin-top:15px;} #yan-wrap:after{content:".";display:block;clear:both;height:0;visibility:hidden;} .c-std #yan-content{float:left;width:471px;} .c-std #yan-related{float:right;width:243px;} .reversed #yan-content{float:right;} .reversed #yan-related{float:left;} #yan-content,#yan-related,.yan-content,.yan-related{zoom:1;position:relative;} #yan-content:after,#yan-related:after,.yan-content:after,.yan-related:after{content:".";display:block;clear:both;height:0;visibility:hidden;} .yan-content{float:left;width:471px;} .full-width .yan-content{float:left;width:631px;} .yan-related{float:right;width:243px;} .c-std .simpleerror{border-top:1px solid #ccc;} .simpleerror{overflow:hidden;zoom:1;} .simpleerror h1{background:url(http://l.yimg.com/h/28130/images/all/warning_22x22.png) no-repeat 0 0.1em;color:#000;padding-left:28px;} .simpleerror ul{margin-left:30px;margin-bottom:1em;} .simpleerror ul li{background:url(http://l.yimg.com/h/28130/images/all/bullets_vertical.gif) no-repeat 0 -442px;padding:0 0 0 10px;margin-bottom:.3em;} .simpleerror em{font-weight:bold;} #yan-breadcrumbs{padding:0;border-bottom:1px solid #ccc;zoom:1;} .c-std #yan-breadcrumbs{border:0;} #yan-breadcrumbs li{display:inline;margin:0;font-size:93%;line-height:2.5;color:#666;list-style:none;} #yan-related .mod,.yan-related .mod{background-color:#f0f8e6;border-top:1px solid #f0f8e6;margin:0 0 1em 0;padding:0 12px 1em 12px;font-size:93%;position:relative;} #yan-related .mod h2,.yan-related .mod h2,#yan-related .mod h3,#yan-filter label{font-size:123.1%;font-weight:bold;color:#666;display:block;margin:0.8em 0;} #yan-related .mod h2,.yan-related .mod h2{color:#333;} #yan-question-filter{float:right;font-size:92%;} #yan-question-filter label{font-weight:bold;} #yan-question-filter label,#yan-question-filter select{line-height:1;vertical-align:middle;} .js #yan-question-filter #yan-filter-submit{display:none;} #yan-related .mod .ft a{display:block;font-weight:bold;margin-top:1em;} #yan-relatedlinks h3{margin-top:1em;font-weight:bold;} #yan-syndication.mod{overflow:hidden;zoom:1;padding-top:1em;} #yan-syndication li{margin:0.3em 0;line-height:1;} #yan-syndication a{background:url(http://l.yimg.com/h/28130/images/all/syndication2.gif) no-repeat;padding-left:16px;line-height:1;} #yan-syndication .myweb a{background-position:-300px 50%;} #yan-syndication .myyahoo a{background-position:-600px 50%;} #yan-syndication .rss a{background-position:-900px 50%;} #yan-syndication .delicious a{background-position:0 50%;} #yan-syndication .myyahoo{float:left;padding-right:10px;border-right:1px solid #333;margin-right:10px;} #yan-syndication .rss{float:left;} #yan-related #yan-persistent-links h2{font-size:116%;} #yan-persistent-links ul{margin:0 0 0.5em;} #yan-persistent-links ul li{margin:0 0 0.5em;} #yan-persistent-links ul li a{background:transparent url(http://l.yimg.com/h/28130/images/all/bullets.gif) no-repeat scroll -903px 0;padding-left:16px;} #yan-persistent-links ul.syndication-links li a{background:url(http://l.yimg.com/h/28130/images/all/syndication2.gif) no-repeat;} #yan-persistent-links ul.syndication-links .myweb a{background-position:-300px 50%;} #yan-persistent-links ul.syndication-links .myyahoo a{background-position:-600px 50%;} #yan-persistent-links ul.syndication-links .rss a{background-position:-900px 50%;} #yan-persistent-links ul.syndication-links .delicious a{background-position:0 50%;} .category-questions ul li{list-style-type:disc;margin:0.5em 0;list-style-position:inside;} #yan-filter h2{position:absolute;left:-9999px;} .button-group button,.button-group:hover button,.button-group:active button{font-size:85%;} .button-group button,.button-group:hover button,.button-group:active button,input.alt-button,a.alt-button{background:#E5E5E5 url(http://l.yimg.com/h/28130/images/all/button-gray.gif) no-repeat;border:1px solid #A6A6A6;color:#404040;padding:1px 10px;*padding:1px 2px;cursor:pointer;} .button-group button.default,.button-group .default:hover,.button-group .default:active,input.button,a.button{background-color:#4384F0;background-image:url(http://l.yimg.com/h/28130/images/all/button-blue.gif);background-repeat:no-repeat;border:1px solid #1E5FC7;color:#fff;font-weight:bold;padding:1px 10px;cursor:pointer;} a.button,a.alt-button{padding:2px 10px;text-decoration:none;*display:inline-block;} #yan-content .pagination{margin:1.82em 0;font-size:85%;overflow:hidden;zoom:1;} #yan-content .pagination h3{position:absolute;left:-9999px;} #yan-content .pagination ul{float:left;} #yan-content .pagination li{font-weight:bold;margin-right:4px;float:left;} #yan-content .pagination a,#yan-content .pagination span{font-weight:normal;border:1px solid #ccc;padding:3px 6px;text-decoration:none;float:left;} #yan-content .pagination span.more{border:0;margin-left:4px;} #yan-content .pagination a:hover{color:#fff;background:#069;border-color:#333;} #yan-content .pagination .current span{font-weight:bold;color:#333;background:#f3f3f3;} #yan-content .pagination p{float:left;color:#666;padding:4px 7px;margin:0;} p.cta,div.cta{display:block;margin:1em 0;} .cta button,.cta input,.cta a{border:0;text-decoration:none;text-align:left;width:auto;-moz-box-sizing:content-box;font:100% arial,sans-serif;overflow:visible;display:-moz-inline-stack;display:inline-block;cursor:pointer;*position:relative;*white-space:nowrap;vertical-align:middle;} .js .cta button,.js .cta input,.js .cta a{padding:0;margin:5px;} .cta button:hover,.cta button.hover,.cta a:hover,.cta a.hover{text-decoration:none;} .cta span{float:left;position:relative;top:5px;left:5px;} .cta span span{background-position:0 100%;top:0;left:-10px;} .cta span span span{background-position:0 0;top:-10px;left:0;margin-bottom:-5px;} .cta span span span span{background-position:100% 0;top:0;left:10px;margin-bottom:0;padding:5px 23px 0 12px;} .cta button,.cta a,.cta input{background:#069;color:#fff;border:0;font-weight:bold;padding:2px 4px;} .js .cta button,.js .cta a,.js .cta input{padding:0;} .cta span{background:url(http://l.yimg.com/h/28130/images/all/cta-darkblue.gif) no-repeat 100% 100%;} .cta .secondary{background-color:#ccc;color:#000;} .cta .secondary:hover{background-color:#868686;color:#000;} .cta .secondary span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-gray.gif);} .cta .secondary:hover span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-gray-hover.gif);} .cta .articles{background-color:#21850A;color:#000;} .cta .articles span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-darkgreen.png);} .cta .search{background-color:#FED350;color:#333;} .cta .search span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-orange.png);} .cta .search:hover span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-orange-hover.png);color:#333;} .cta a:hover,.cta a.hover,.cta button:hover,.cta button.hover,.cta input:hover,.cta input.hover,.cta :focus{background-color:#00295c;color:#fff;} .cta :hover span,.cta .hover span,.cta :focus span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-darkblue-hover.gif);} .cta a:disabled,.cta a.disabled,.cta button:disabled,.cta button.disabled,.cta input:disabled,.cta input.disabled,.cta :disabled:hover,.cta .disabled:hover{background-color:#ddd;cursor:default;} .cta :disabled span,.cta .disabled span,.cta :disabled:hover span,.cta .disabled:hover span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-disabled.png);color:#666;} .cta a:hover{zoom:1;} html>body.js .cta button,html>body.js .cta button:hover,html>body.js .cta button:disabled,html>body.js .cta button.secondary,html>body.js .cta button.articles,x:-moz-any-link{margin:4px 5px 4px 2px;} html>body.js .cta button,html>body.js .cta button:hover,html>body.js .cta button:disabled,html>body.js .cta button.secondary,html>body.js .cta button.articles,x:-moz-any-link,x:default{background:none;margin:0;padding:4px 2px;} .tab-view{margin:0.55em 0;} .tab-view .hd{line-height:1;zoom:1;font-size:93%;} .tab-view .hd:after{content:".";display:block;clear:both;height:0;visibility:hidden;} .tab-view .hd li,.tab-view .hd li a{background:transparent url(http://l.yimg.com/h/28130/images/all/tab-view-tabs.png) no-repeat;} .tab-view .hd li{float:left;margin:0 10px 0 0;padding:0 0 0 9px;position:relative;font-weight:bold;} .tab-view .hd li a{float:left;padding:5px 9px 5px 0;color:#666;background-position:100% 0;margin-right:-5px;position:relative;} .tab-view .hd li a:hover{text-decoration:none;} .tab-view .hd li.selected{background-position:0 -200px;border-color:transparent;margin-bottom:-1px;padding-bottom:1px;} .tab-view .hd li.selected a{background-position:100% -200px;color:#333;margin-bottom:-1px;padding-bottom:6px;} .js .tab-view .bd .selected{position:static;left:0;} .js .tab-view .bd .not-selected{position:absolute;left:-9999em;} .tab-view .bd{background:#eaf6de;border:1px solid #ccc;padding:7px;} .tab-view .bd ul{border:1px solid #ccc;font-size:93%;background:#fff;} .tab-view .bd ul label{display:inline;font-weight:normal;} #yan-related .marketing-ad{background:none;border:0;padding:0;} #yan-related .marketing-ad img,#yan-related .marketing-ad object,#yan-related .marketing-ad iframe,#yan-related .marketing-ad embed{display:block;margin:0 auto;} #yan-related .marketing-ad table{margin:0 auto;} .wide #yan{width:969px;} .wide #yan-content{width:631px;} .user-index #yan-content,.user-network #yan-content{z-index:2;} .wide #yan-related{position:relative;width:311px;} .wide #yan-wrap{padding:0 9px;} .wide #yan-header-searchbox{text-align:center;} .full-width #yan-content{width:100%;} .count-chars{float:left;clear:right;font-size:85%;} .count-chars span{font-weight:bold;} .yui-panel{background:transparent;border:0;} .yui-panel .hd{background:transparent url(http://l.yimg.com/i/i/eu/se/an/dialo.gif) no-repeat;border:0;white-space:normal;} .yui-panel .hd div{color:#000;font-size:108%;font-weight:bold;padding:16px 24px 8px 8px;color:#666;} .yui-panel.ico-blank .hd div{padding-left:25px;} .yui-panel.ico-starred .hd div{background:url(http://l.yimg.com/a/i/us/sch/gr2/starrated_12x12.gif) no-repeat 7px 18px;padding-left:25px;} .yui-panel.ico-blue-buddy .hd div{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/bud12_1.gif) no-repeat 7px 18px;padding-left:25px;} .yui-panel.ico-yield .hd div{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/warn12_1.gif) no-repeat 7px 18px;padding-left:25px;} .yui-panel.ico-block .hd div{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/blck12_1.gif) no-repeat 7px 18px;padding-left:25px;} .yui-panel .bd{overflow:hidden;} .yui-panel .bd{background:#fff url(http://l.yimg.com/i/i/eu/se/an/dialo.gif) 0 -14px;text-align:left;padding:0 15px 0 29px;font-size:93%;} .yui-panel .bd p{margin:0;} .yui-panel .container-close{position:absolute;top:14px;right:12px;z-index:6006;height:12px;width:12px;margin:0;padding:0;background:url(http://l.yimg.com/a/i/nt/ic/ut/alt3/close12_1.gif) no-repeat;cursor:pointer;} .yui-panel .container-close.nonsecure{background-image:url(http://l.yimg.com/a/i/nt/ic/ut/alt3/close12_1.gif);} .yui-panel .container-close.secure{background-image:url(https://s.yimg.com/lq/i/nt/ic/ut/alt3/close12_1.gif);} .yui-panel .ft{overflow:hidden;background:transparent url(http://l.yimg.com/i/i/eu/se/an/dialo.gif) no-repeat left bottom;padding:15px 15px 20px 15px;} #yan-marketing-video_c .bd{background:#fff;padding:15px;border:1px solid #999;} #yan-marketing-video_c .container-close{top:2px;right:2px;} .question-ask h1,.question-categorize h1,.question-preview h1,.question-answer h1,.question-answerpreview h1,.question-askadditional h1,.group-create h1{margin:0;padding:0.7em 0 0.7em 25px;position:relative;} h1 span.step{position:absolute;left:-9999px;} .question-ask h1 span.number,.question-categorize h1 span.number,.question-preview h1 span.number,.question-answer h1 span.number,.question-answerpreview h1 span.number,.question-askadditional h1 span.number,.group-create h1 span.number,#yan-group-whatsnew span.number{position:absolute;width:20px;line-height:20px;color:#fff;background:url(http://l.yimg.com/h/28130/images/all/ask-title-bg.gif) no-repeat 0 center;text-align:center;display:block;font-weight:normal;font-size:85%;left:0;top:50%;margin-top:-10px;*top:auto;*margin-top:0;_left:-25px;} .ask-flow,.create-group-flow,.user-edit-flow,.advanced-search-flow,#flag-abuse,.appeal-flow{border:1px solid #ccc;padding:1.07em 14px;background:url(http://l.yimg.com/h/28130/images/all/question-bg-top.gif) repeat-x 0 0;width:601px;float:left;} .ask-flow .buttons,.create-group-flow .buttons{overflow:hidden;} .ask-flow .buttons .cta,.create-group-flow .buttons .cta{margin:0;} .ask-flow .has-error,.create-group-flow .has-error{border:1px solid #f00;} .ask-flow .sub-text,.user-edit-flow .sub-text{padding:1em 0 0 0;font-size:93%;} .ask-flow .sub-text a,.ask-flow .sub-text strong,.create-group-flow .sub-text a,.create-group-flow .sub-text strong,{font-weight:bold;} .ask-flow h2,.create-group-flow h2{font-weight:bold;font-size:116%;margin-bottom:7px;} .ask-flow .question-details,.ask-flow .answer-details{background:transparent url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 100%;padding:0 0 14px 0;margin:0 0 14px 0;overflow:hidden;zoom:1;} #yan-answer-preview .question-details{margin-bottom:20px;padding-bottom:20px;} .ask-flow .question-details div.container,.ask-flow .answer-details div.container{overflow:hidden;zoom:1;} .ask-flow .question-details h2{color:#67CE12;} .ask-flow .question-details h3{font-size:146.5%;font-weight:bold;color:#000;line-height:1.1;margin:0 0 8px 0;} .ask-flow .answer-details h3{font-weight:bold;margin:0 0 0.3em 0;font-size:108%;} .ask-flow .answer-details h3.sources{font-size:100%;margin-bottom:0;} .ask-flow .answer-details .content{margin:0 0 0.5em 0;} .ask-flow .answer-details .last{margin:0;} .ask-flow .question-details h4{font-weight:bold;margin-bottom:0.1em;font-size:100%;} .js #yan-ask-title-l,.js #yan-group-title-l{position:absolute;left:-9999em;} #yan-ask-title,#yan-group-title{font-size:131%;padding:3px;width:590px;display:block;margin-bottom:0.2em;} input.default,textarea.default{color:#999;} .ask-flow label,.create-group-flow label,.acts-as-label{display:block;color:#333;font-weight:bold;margin-bottom:4px;font-size:108%;} #yan-ask-details-lbl{color:#666;} #yan-ask-details,.group-create #yan-group-details,#yan-answer-answer,#yan-answer-source,#yan-about-you{width:598px;display:block;} .ask-flow legend span,.create-group-flow legend span,#yan-answer-search-inline label span,.user-edit-flow legend span{position:absolute;top:-9999em;} .ask-flow label strong,.create-group-flow label strong,.acts-as-label h3{font-weight:bold;color:#333;} .ask-flow .count-chars,.user-edit-flow .count-chars,.create-group-flow .count-chars{font-size:85%;color:#666;position:absolute;} #yan-ask-choose-categories,#yan-group-choose-categories{padding-top:1em;} #yan-ask-choose-categories h3,#yan-group-choose-categories h3{font-weight:bold;} #yan-ask-choose-categories h3{margin-bottom:1.5em;} #yan-minierror-cta{background:#FFDEDE url(http://l.yimg.com/h/28130/images/all/16x16_caution.png) 5px 5px no-repeat;color:#000;padding:2px 5px 2px 28px;min-height:12px;_height:12px;margin:10px 0;font-size:93%;} #yan-minierror-cta em{font-weight:bold;} #yan-minierror-cta p{margin:0;} #yan-miniconfirm-cta{background:#DEF1CE url(http://l.yimg.com/h/28130/images/all/tick22x22.png) 5px 50% no-repeat;color:#000;padding:7px 5px 7px 35px;min-height:12px;_height:12px;margin:10px 0;} #yan-miniconfirm-cta em{font-weight:bold;} #yan-miniconfirm-cta p{margin:0;} #yan-confirm-cta{margin-bottom:1em;} #yan-confirm-cta ul{margin-top:0.7em;} #yan-confirm-cta ul ul{margin-top:0;} #yan-confirm-cta li{list-style:disc inside;margin:0.2em 0 0 0;} #yan-confirm-cta .questions li{list-style:none outside;} #yan-confirm-cta .bd{position:relative;border:1px solid #ccc;padding:10px 20px 10px 56px;min-height:28px;_height:28px;} #yan-confirm-cta .success{background:#DBEEC0 url(http://l.yimg.com/h/28130/images/all/correct.gif) 14px 10px no-repeat;} #yan-confirm-cta .bd h1{font-size:138.5%;font-weight:bold;color:#333;padding:0;margin:0 0 .1em 0;} #yan-confirm-cta .bd p{margin:.5em 0 0;} #yan-confirm-cta .bd p em{font-weight:bold;} #yan-confirm-cta .bd .first{margin:0;} #yan-confirm-cta .bd .first em{font-size:138.5%;font-weight:bold;color:#333;display:block;margin-bottom:.1em;} #yan-confirm-cta .bd .offpage{position:absolute;left:-9999px;} #yan-confirm-cta .ft{border:1px solid #ccc;border-top:none;padding:5px 21px 12px;overflow:hidden;zoom:1;} #yan-confirm-cta .ft .questions{margin:0;} #yan-confirm-cta .ft .questions li{background:url(http://l.yimg.com/h/28130/images/all/border-h.gif) repeat-x 0 100%;padding:5px 0;} #yan-confirm-cta .ft .questions li.last{padding-bottom:0;} #yan-confirm-cta .ft .questions li li,#yan-confirm-cta .ft .questions li.last,#yan-confirm-cta .ft .questions li div{background:none;} #yan-confirm-cta .ft .questions li img{margin-left:0;} #yan-confirm-cta .ft .questions li li{padding:0;} #yan-info-cta{margin-top:10px;margin-bottom:1em;border:1px solid #d5d5d5;} #yan-info-cta .bd{position:relative;padding:10px 20px 10px 46px;} #yan-info-cta .success{background:#edf7fc url(http://l.yimg.com/h/28130/images/all/infometro28_1.gif) no-repeat 9px 9px;} #yan-info-cta .success-small{padding:5px 10px 8px 32px;background:#edf7fc url(http://l.yimg.com/us.yimg.com/i/nt/ic/ut/bsc/info_metro16_1.gif) no-repeat 9px 11px;} #yan-info-cta .bd h1{font-size:108%;font-weight:bold;color:#333;padding:0;margin:0 0 .1em 0;} #yan-info-cta .bd p{color:#424242;margin:.5em 0 0;} #yan-info-cta .bd p em{font-weight:bold;} #yan-info-cta .bd .first{margin:0;} #yan-info-cta .bd .first em{font-size:108%;font-weight:bold;color:#333;display:block;margin-bottom:.1em;} #yan-info-cta .bd .offpage{position:absolute;left:-9999px;} .spell-trigger{background:url(http://l.yimg.com/a/i/us/sch/gr/16_ask_spell_v3.gif) no-repeat 0 0;color:#069;float:right;display:block;font-size:93%;padding:0 0 4px 20px;} .spellcheck-container strong{font-size:93%;font-weight:bold;} .spellcheck-container{background-color:#FCFBE5;border:1px solid #D6D6CC;padding:5px;clear:both;} .spellcheck-container div{overflow:hidden;zoom:1;padding-bottom:5px;} .spellcheck-container .changeto{float:left;padding:0;} .spellcheck-container .otherwords{float:right;padding:0;} .spellcheck-container button{font-size:85%;padding:3px;border-color:#fff #C1C1C1 #C1C1C1 #fff;background-color:#E6E6E6;margin-right:4px;} .spellcheck-container .spellcheck-buttons{zoom:1:overflow:hidden;} .spellcheck-container .change,.spellcheck-container .ignore{float:left;} .spellcheck-container .done{float:right;margin:0;} .spellcheck-container label{display:block;float:left;font-family:Verdana,Arial,sans-serif;font-size:77%;line-height:18px;padding-right:4px;} .spellcheck-container select,.spellcheck-container input{float:left;color:#000;display:block;width:140px;} .ask-flow .spellcheck-container,.answer-flow .spellcheck-container,.group-create .spellcheck-container{border:1px dotted #ddd;border-width:1px 0;margin:2em 0;} #yan-leaderboard .bd ul li div.profile{margin:0 10px 0 6px;width:auto;} #yan-leaderboard{background-color:#F0F8E6;border-top:1px solid #CCC;padding:12px;} #yan-leaderboard .hd h2{color:#666;display:block;font-size:123.1%;font-weight:bold;margin-bottom:0.7em;} #yan-leaderboard .hd h3 span{font-weight:normal;} #yan-leaderboard table{position:relative;margin-bottom:10px;table-layout:fixed;width:287px;} #yan-leaderboard th{padding-top:.6em;font-size:93%;} #yan-leaderboard th.position{width:20px;} #yan-leaderboard th.user{width:187px;} #yan-leaderboard th.best-answers{width:80px;text-align:right;} #yan-leaderboard th span{position:absolute;text-indent:-999em;} #yan-leaderboard td{vertical-align:top;padding:.6em 0;background:transparent url(http://l.yimg.com/h/28130/images/all/dotted-line-green.gif) repeat-x bottom left;font-weight:bold;} #yan-leaderboard .first td{padding-top:0;} #yan-leaderboard .first td span{display:block;overflow:hidden;width:121px;} #yan-leaderboard .first td.user{white-space:normal;overflow:visible;width:auto;} #yan-leaderboard .first td span.nickname{white-space:nowrap;} #yan-leaderboard td div{float:left;margin-right:10px;} #yan-leaderboard td div.profile{width:auto;} #yan-leaderboard .first td a{font-size:116%;} #yan-leaderboard .first td div img{position:relative;margin-top:-1em;} #yan-leaderboard .first td.position span{display:block;position:relative;margin-top:-1em;} #yan-leaderboard .first td.best-answers{font-size:123.7%;} #yan-leaderboard td.user{white-space:nowrap;overflow:hidden;width:187px;} #yan-leaderboard td.best-answers{text-align:right;} #yan-leaderboard .ft a{font-weight:bold;} .user-listing ol{overflow:hidden;zoom:1;} .user-listing ol li{float:left;width:130px;margin-bottom:.5em;} .user-listing ol li.alt{clear:left;margin-right:10px;} .user-listing ol li .profile{width:16px;margin-right:8px;} .user-listing ol li a{display:block;} #yan-announcement{background:#F8DADA url(http://l.yimg.com/h/28130/images/all/warning_22x22.png) no-repeat 5px 5px;color:#000;padding:7px 5px 7px 35px;min-height:12px;_height:12px;margin-bottom:10px;} #promo .promo-content{padding:7px 20px;background:#770495 url(http://l.yimg.com/h/28130/images/all/promoback.png) repeat-x center left;zoom:1;} #promo{border:1px solid #ccc;padding:3px;margin-bottom:1em;} #promo p{margin:0;color:#fff;} #promo p.cta{margin:10px 0 0 0;} #promo p.promo-text{color:#fff;font-size:138.5%;font-weight:bold;} #promo.alt p{color:#000;} #promo.alt .promo-content{background:#DDF17B url(http://l.yimg.com/h/28130/images/all/greenback.png) repeat-x center left;padding:7px 20px;} ul.promo-ctas{margin-top:10px;} ul.promo-ctas li{display:inline;} .fb-button{margin-top:10px;} p.cr-nosuggestions{padding:6px;} .ask-flow .updates-disclosure,.answer-flow .updates-disclosure{background:#f8f8f8;margin:10px -14px;padding:0 14px;} #yan-advert-north{margin:0 auto 10px;width:728px;} #promo .fbc-button,#yan-confirm-cta .bd .fbc-button,.fbc-button{margin-top:10px;} .fbc-button a{display:inline-block;color:#fff;text-decoration:none;border:1px solid #29447E;} .fbc-button a span{background:#637BAD url(http://l.yimg.com/h/28130/images/all/fb.png) no-repeat;font-size:11px;font-weight:bold;display:inline-block;} .fbc-button a span span{padding:4px 7px 2px 30px;display:inline-block;background:none;} .yan-content-loading{position:absolute;padding-bottom:20px;margin:1em;text-align:center;font-size:93%;color:#666;background:#FFF url(http://l.yimg.com/h/28130/images/all/page-loader.gif) no-repeat bottom center;} .yan-content-loading p{margin-bottom:.2em;} #ip-redirect-wrapper{overflow:hidden;zoom:1;padding:10px;border-left:2px solid #D4EE80;border-right:2px solid #D4EE80;border-bottom:2px solid #B3D296;background-position:0 3.8em;background-repeat:no-repeat;background-color:#D4EE80;background-image:-moz-linear-gradient(100% 100% 90deg,#BAE164,#BAE164);background-image:-webkit-gradient(linear,0% 0,0% 200%,from(#BAE164),to(#BAE164));line-height:1;} #ip-redirect-wrapper .message{float:left;width:545px;margin-top:14px;} #ip-redirect-wrapper .options{float:left;width:360px;margin-top:10px;margin-left:20px;} #ip-redirect-wrapper .close{float:right;width:14px;} #ip-redirect-wrapper .close a{display:block;text-indent:-9999em;background:url(http://l.yimg.com/h/28130/images/all/close.png) no-repeat top left;overflow:hidden;} #ip-redirect-wrapper p{margin-bottom:.5em;} #ip-redirect-wrapper .large{font-size:153.9%;margin-bottom:0.3em;} #ip-redirect-wrapper .large em{font-weight:bold;} #ip-redirect-wrapper .large span{display:block;} #ip-redirect-wrapper .options .cta{margin:0 0 0.4em;} #yan-nav #ip-requested-intl{float:right;background-color:transparent;border:none;text-transform:none;font-size:85%;font-weight:normal;color:#069;margin-right:0;} #yan-nav #ip-requested-intl.hover,#yan-nav #ip-requested-intl:hover,#yan-nav #ip-requested-intl.hover a,#yan-nav #ip-requested-intl:hover a{background-color:transparent;border:none;} #yan-nav #ip-requested-intl a,#yan-nav #ip-requested-intl a:hover{background-color:transparent;border:none;font-weight:normal;margin-top:7px;padding:2px 0 4px 22px;color:#069;background-image:url(http://l.yimg.com/h/28130/images/all/intl-flags.gif);background-repeat:no-repeat;} #yan-nav #ip-requested-intl,#yan-nav #ip-requested-intl a,#yan-nav #ip-requested-intl:hover a,#yan-nav #ip-requested-intl.hover a{-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-topright:0;-ms-border-top-left-radius:0;-ms-border-top-right-radius:0;border-top-left-radius:0;border-top-right-radius:0;} #yan-nav .us a,#yan-nav .e1 a,#yan-nav .us a:hover,#yan-nav .e1 a:hover,#yan-nav .us:hover a,#yan-nav .e1:hover a{background-position:0 -1520px;} #yan-nav .ca a,#yan-nav .ca a:hover,#yan-nav .ca:hover a{background-position:0 -352px;} #yan-nav .qc a,#yan-nav .qc a:hover,#yan-nav .qc:hover a{background-position:0 -1593px;} #yan-nav .cf a,#yan-nav .cf a:hover,#yan-nav .cf:hover a{background-position:0 -498px;} #yan-nav .mx a,#yan-nav .mx a:hover,#yan-nav .mx:hover a{background-position:0 -1009px;} #yan-nav .in a,#yan-nav .in a:hover,#yan-nav .in:hover a{background-position:0 -790px;} #yan-nav .uk a,#yan-nav .uk a:hover,#yan-nav .uk:hover a{background-position:0 -1447px;} #yan-nav .de a,#yan-nav .de a:hover,#yan-nav .de:hover a{background-position:0 -498px;} #yan-nav .fr a,#yan-nav .fr a:hover,#yan-nav .fr:hover a{background-position:0 -644px;} #yan-nav .it a,#yan-nav .it a:hover,#yan-nav .it:hover a{background-position:0 -863px;} #yan-nav .es a,#yan-nav .es a:hover,#yan-nav .es:hover a{background-position:0 -571px;} #yan-nav .br a,#yan-nav .br a:hover,#yan-nav .br:hover a{background-position:0 -279px;} #yan-nav .ar a,#yan-nav .ar a:hover,#yan-nav .ar:hover a{background-position:0 -133px;} #yan-nav .au a,#yan-nav .au a:hover,#yan-nav .au:hover a{background-position:0 -206px;} #yan-nav .nz a,#yan-nav .nz a:hover,#yan-nav .nz:hover a{background-position:0 -1666px;} #yan-nav .sg a,#yan-nav .sg a:hover,#yan-nav .sg:hover a{background-position:0 -1228px;} #yan-nav .my a,#yan-nav .my a:hover,#yan-nav .my:hover a{background-position:0 -1082px;} #yan-nav .ph a,#yan-nav .ph a:hover,#yan-nav .ph:hover a{background-position:0 -1155px;} #yan-nav .cn a,#yan-nav .cn a:hover,#yan-nav .cn:hover a{background-position:0 -425px;} #yan-nav .jp a,#yan-nav .jp a:hover,#yan-nav .jp:hover a{background-position:0 -936px;} #yan-nav .kr a,#yan-nav .kr a:hover,#yan-nav .kr:hover a{background-position:0 -1301px;} #yan-nav .tw a,#yan-nav .tw a:hover,#yan-nav .tw:hover a{background-position:0 -1374px;} #yan-nav .hk a,#yan-nav .hk a:hover,#yan-nav .hk:hover a{background-position:0 -717px;} #yan-nav .vn a,#yan-nav .vn a:hover,#yan-nav .vn:hover a{background-position:0 -1885px;} #yan-nav .id a,#yan-nav .id a:hover,#yan-nav .id:hover a{background-position:0 -1739px;} #yan-nav .th a,#yan-nav .th a:hover,#yan-nav .th:hover a{background-position:0 -1812px;} #yum *,#yum-branding *{margin:0;padding:0;} #yum{line-height:2.2em;background:#eee;border-bottom:1px solid #ddd;padding:0 0.5em;text-align:right;font:78% verdana,sans-serif;white-space:nowrap;overflow:hidden;display:inline-block;} #yum{display:block;} #yum *{line-height:2.2em;vertical-align:middle;} #yum form{display:inline;font-weight:bold;color:#666;} #yum form div{display:inline;} #yum input{font-size:100%;line-height:normal;padding:0.1em;} #yum .btn{font-weight:bold;font-family:verdana,sans-serif;background:#ddd;overflow:visible;padding:0 0.5em;} #yum ul{float:left;list-style:none;} #yum li{float:left;margin-right:0.7em;display:inline;} #yum a{color:#666;text-decoration:none;} #yum-search{width:20em;} #yum-branding{border-top:1px solid #aaa;padding:0.5em;text-align:right;font:78% verdana,sans-serif;white-space:nowrap;overflow:hidden;display:inline-block;} #yum-branding{display:block;} #yum-branding img{float:left;display:inline;margin-right:2em;} #yum-branding li{display:inline;} #yum-user{float:left;text-align:left;} #yum-user em{font-weight:bold;} #yum-user .signed-out li{display:block;} #yum-user .sign-in{font-size:124%;font-weight:bold;display:block;} #yum-branding>a{float:left;} #hd,.tabbed-content{position:relative;z-index:2;} #hd{z-index:3;} #yan-banner{background:#148D0B url(http://l.yimg.com/a/i/us/sch/gr4/gradient_header.png) repeat-x 0 0;color:#fff;border:1px solid #0D7A05;border-width:1px 0;padding:0 0 6px;} #yan-banner ul{overflow:hidden;zoom:1;padding:0 10px 0;border-top:1px solid #81C844;position:relative;} #yan-banner li{float:left;width:187px;padding-left:56px;margin-top:6px;position:relative;} #yan-banner .short li{padding-left:48px;} .wide #yan-banner li{width:187px;} .wide #yan-banner ul li{width:260px;} .wide #yan-banner .short #yan-banner-ask{width:471px;} #yan-banner .short{line-height:43px;} #yan-banner .short div input,#yan-banner .short div button{display:inline;} #yan-banner .short #yan-banner-ask #banner-ask{width:190px;vertical-align:middle;} #yan-banner .short #yan-banner-ask label{display:block;margin-bottom:-12px;_margin-bottom:-2px;line-height:1;} #yan-banner .short #yan-banner-ask p{zoom:1;} .js #yan-banner .short #yan-banner-ask p input{*margin-right:6px;} .js #yan-banner .short #yan-banner-ask p{_padding-top:5px;} .js #yan-banner .short #yan-banner-ask p{padding-bottom:4px;} #yan-banner-ask #yan-banner-ask p{line-height:2.4;} .question-ask .short #yan-banner-ask p{line-height:1.3;} .question-ask .short #yan-banner-ask p span{font-weight:bold;display:block;margin-top:0.2em;_margin-top:0;} #yan-banner .short div h2{float:left;margin-top:0.2em;*margin-top:-0.4em;} .short #yan-banner-ask div h2{margin-right:0.4em;} .short #yan-banner-ask div p{font-size:93%;overflow:hidden;} .wide #yan-banner .short li{width:165px;} #yan-banner h2{font:231%/1 georgia,serif;color:#fff;vertical-align:-0.2em;margin-left:-65px;margin-bottom:0.2em;*margin-top:-0.2em;*margin-bottom:-0.4em;} #yan-banner h2 a{color:#fff;padding:4px 0 20px 65px;zoom:1;position:relative;} #yan-banner .short h2 a{padding:14px 0 10px 65px;} #yan-banner h2 a{text-decoration:none;} #yan-banner em{font-weight:bold;} #yan-banner form{padding:0 10px 8px;margin-right:10px;background:url(http://l.yimg.com/a/i/us/sch/gr4/header-large2.png) no-repeat -56px 100%;position:relative;zoom:1;} #yan-banner .short form{padding:0 0 0 10px;margin:0 10px 0 0;background:url(http://l.yimg.com/a/i/us/sch/gr4/header2.png) no-repeat -48px 100%;min-height:47px;_height:47px;} #yan-banner form div{padding:0;} #yan-banner div{padding:0 10px;zoom:1;} #yan-banner div:after{content:".";display:block;clear:both;height:0;visibility:hidden;} #yan-banner #banner-ask{width:90%;margin:7px 0 3px;border:1px solid #ccc;position:relative;z-index:1;padding:2px;} #yan-banner textarea#banner-ask{height:2.5em;width:228px;overflow:auto;} #yan-banner p.cta{margin:10px 0 0;} body #yan-banner #yan-banner-ask,body #yan-banner #yan-banner-answer,body #yan-banner #yan-banner-discover{background:url(http://l.yimg.com/a/i/us/sch/gr4/header-large2.png) no-repeat;padding-top:8px;} body #yan-banner .short #yan-banner-ask,body #yan-banner .short #yan-banner-answer,body #yan-banner .short #yan-banner-discover{background:url(http://l.yimg.com/a/i/us/sch/gr4/header2.png) no-repeat;min-height:47px;_height:47px;} body #hd #yan-banner #yan-banner-answer{background-position:-550px 0;} body #hd #yan-banner #yan-banner-discover{background-position:-1100px 0;} #yan-header-searchbox{padding:15px;border-bottom:1px dotted #ccc;background:url(http://l.yimg.com/a/i/us/sch/gr4/carousel-bg-top.gif) repeat-x;} #yan-header-searchbox input,#yan-header-searchbox label,#yan-header-searchbox a{vertical-align:middle;} #yan-header-searchbox #yan-p{padding:1px;font-size:108%;} #yan-header-searchbox #yan-p.error{padding:3px;*padding:2px;border:1px solid #f00;} #yan-header-searchbox a{margin:0 1em;font-size:85%;} #yan-banner-ask p,#yan-banner-answer p,#yan-banner-discover p{margin:0;} .js #yan-banner-ask label,.offscreen{position:absolute;left:-9999px;} #yan-nav{margin-left:10px;} #yan-nav .yui-overlay .sub{display:block;} #yan-nav .sub{display:none;} #yan-nav li a{padding-top:7px;} #yan-nav li a{text-decoration:none;} #yan-nav li a:hover{text-decoration:underline;} #yan-nav li.current{margin-bottom:-2px;padding-bottom:2px;} #yan-nav li:hover,#yan-nav li.hover{margin-bottom:-4px;padding-bottom:4px;} #yan-nav li{text-transform:uppercase;position:static;} #yan-nav .yui-module{background:#3BAE08;border:1px solid #0D7A05;} #yan-nav .yui-module{width:17em;} #yan-nav #yan-nav-browse-menu{width:50em;} #yan-nav .menu .bd{padding:1em;border:1px solid #82C844;overflow:hidden;zoom:1;} #yan-nav .yui-module p,#yan-nav .yui-module p a,#yan-nav .yui-module li,#yan-nav .yui-module li a,#yan-nav .yui-module li:hover,#yan-nav .yui-module li.hover #yan-nav .yui-module li:hover a,#yan-nav .yui-module li.hover a{background:none;text-transform:none;color:#fff;font-weight:normal;margin:0;padding:0;float:none;} #yan-nav .yui-module p.last{margin-top:1em;} #yan-nav .yui-module p a{font-weight:bold;} #yan-nav li.current p a,#yan-nav li:hover p a,#yan-nav li.hover p a{border:0;} #yan-nav .yui-module li,#yan-nav .yui-module p{font-size:93%;} #yan-nav #yan-nav-browse-menu ul{float:left;width:25%;} #yan-nav #yan-nav-browse-menu li{white-space:normal;} #yan-nav .yui-module li a{display:block;padding:0.5em 0;} .cta{vertical-align:middle;} .cta span{background:url(http://l.yimg.com/h/28130/images/all/cta-darkblue.gif) no-repeat 100% 100%;} .cta span span span span{padding:5px 13px 0 2px;} #yan-related #yan-mystatus,#yan-related #yan-myincentives{padding:10px;background:#f0f8e6;padding:10px;width:291px;} #yan-related #yan-myincentives{border-bottom:0;} #yan-mystatus .bd,#yan-myincentives .bd{overflow:hidden;zoom:1;} #yan-mystatus .photo{float:left;margin-right:10px;} #yan-mystatus .signedout p{background:url(http://l.yimg.com/a/i/us/sch/gr4/login-smiley.gif) no-repeat;min-height:40px;_height:40px;padding:10px 0 0 50px;text-align:center;} #yan-mystatus .signedout a{white-space:nowrap;font-weight:bold;display:block;} #yan-mystatus .additional{margin-top:0.5em;} #yan-mystatus .additional a{font-size:85%;overflow:hidden;padding-left:14px;background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/bud12_1.gif) no-repeat;} #yan-mystatus .photo{border:1px solid #ccc;background:#fff;padding:2px;overflow:hidden;zoom:1;} #yan-mystatus a .fn{display:inline;color:#069;} #yan-mystatus .url:hover .fn{text-decoration:underline;} #yan-mystatus .hd img{float:left;display:inline;margin:0 10px 0 0;border:0;padding:0;background:none;} #yan-mystatus .signedout p{font-size:108%;} #yan-mystatus .fn{font-weight:bold;} #yan-mystatus p,#yan-mystatus dt,#yan-mystatus dd,#yan-myincentives p{margin-bottom:0.1em;} #yan-myincentives .bd{background:url(http://l.yimg.com/a/i/us/sch/gr2/medal.gif) no-repeat 10px 50%;padding-left:58px;min-height:30px;} #yan-myincentives strong{color:#7bcd42;font-size:116%;font-weight:bold;} #yan-myincentives em{color:#7bcd42;font-size:116%;font-weight:bold;} body.js #yan-related #yan-myincentives{position:absolute;left:-9999px;padding-bottom:0;} html{background:#7FB3CC url(http://l.yimg.com/a/i/us/sch/gr4/wide-site-bg.png) repeat-y 50% 0;} #yan{margin:0 auto;} #ysfAPILog{background:#fff;} .wide #yan{width:970px;border:0;} #ft{clear:both;text-align:left;background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 50px;padding:70px 14px 10px 10px;font-size:77%;} #ft h2{margin:0 0.2em .8em 0;color:#333;white-space:nowrap;font-weight:bold;font-size:110%;} .question-index #ft h2{float:none;margin:0 0 1em 0;} #ft p{margin:10px 0;color:#666;} #ft .policies{margin-top:-10px;} #ft .copyright{color:#333;} #ft .policies li{display:inline;} #ft .tell-us a,#ft .policies a{color:#666;text-decoration:underline;} #ft .tell-us a:hover,#ft .policies a:hover{color:#069;} #ft #yan-intls{overflow:hidden;margin:0 15px 25px 0;zoom:1;} #yan-intls li{float:left;display:inline;margin:0 1.5em 0.4em 0;padding:0;} #yan-intls li a{float:left;min-height:13px;font-size:110%;white-space:nowrap;color:#333;padding:0 0 0.4em 22px;background:url(http://l.yimg.com/h/28130/images/all/intl-flags.gif) no-repeat 0 -60px;} #yan-intls .us a,#yan-intls .e1 a{background-position:0 -1520px;} #yan-intls .ca a{background-position:0 -352px;} #yan-intls .qc a{background-position:0 -1593px;} #yan-intls .cf a{background-position:0 -498px;} #yan-intls .mx a{background-position:0 -1009px;} #yan-intls .in a{background-position:0 -790px;} #yan-intls .uk a{background-position:0 -1447px;} #yan-intls .de a{background-position:0 -498px;} #yan-intls .fr a{background-position:0 -644px;} #yan-intls .it a{background-position:0 -863px;} #yan-intls .es a{background-position:0 -571px;} #yan-intls .br a{background-position:0 -279px;} #yan-intls .ar a{background-position:0 -133px;} #yan-intls .au a{background-position:0 -206px;} #yan-intls .nz a{background-position:0 -1666px;} #yan-intls .sg a{background-position:0 -1228px;} #yan-intls .my a{background-position:0 -1082px;} #yan-intls .ph a{background-position:0 -1155px;} #yan-intls .cn a{background-position:0 -425px;} #yan-intls .jp a{background-position:0 -936px;} #yan-intls .kr a{background-position:0 -1301px;} #yan-intls .tw a{background-position:0 -1374px;} #yan-intls .hk a{background-position:0 -717px;} #yan-intls .vn a{background-position:0 -1885px;} #yan-intls .id a{background-position:0 -1739px;} #yan-intls .th a{background-position:0 -1812px;} #yan-categories li,#yan-relatedlinks li,#yan-relatedqs li{display:inline;} #yan-categories li a,#yan-relatedlinks li a,#yan-relatedqs li a{background:url(http://l.yimg.com/h/28130/images/all/bullets.gif) no-repeat -903px 0;padding-left:14px;margin:5px 0;display:block;zoom:1;} #yan-categories .expanded a{background-position:-604px 0;font-weight:bold;} #yan-categories .expanded li a,#yan-relatedqs ul li a{background-position:-1500px 0.1em;font-size:100%;margin:3px 0;font-weight:normal;} #yan-categories li a.current{background-position:-1789px 0.3em;background-color:#fff;border:1px solid #54c40a;border-width:1px 0;margin:0 -12px;padding:3px 0 3px 26px;font-weight:bold;} #yan-categories li a,#yan-relatedlinks li a{color:#333;display:block;} #yan-categories li ul{margin:5px 0 0;} #yan-content #yan-categories{border:1px solid #ccc;background:transparent url(http://l.yimg.com/h/28130/images/all/question-bg-top.gif) top left repeat-x;padding:5px 10px 5px 10px;overflow:hidden;zoom:1;margin-bottom:1em;} #yan-content #yan-categories h1,#yan-content #yan-categories h2{font-size:18px;color:#000;padding:0 0 0 45px;line-height:40px;background:transparent url(http://l.yimg.com/h/28130/images/all/all-category-icons.gif) top left no-repeat;float:left;} #yan-content #yan-categories .cat-best-answer{background-position:0 -100px;} #yan-content #yan-categories .cat-396545012{background-position:0 -200px;} #yan-content #yan-categories .cat-396545144{background-position:0 -300px;} #yan-content #yan-categories .cat-396545013{background-position:0 -400px;} #yan-content #yan-categories .cat-396545311{background-position:0 -500px;} #yan-content #yan-categories h1.cat-396545660,#yan-content #yan-categories h2.cat-396545660{background-position:0 -600px;} #yan-content #yan-categories h1.cat-396545014,#yan-content #yan-categories h2.cat-396545014{background-position:0 -700px;} #yan-content #yan-categories h1.cat-396545327,#yan-content #yan-categories h2.cat-396545327{background-position:0 -800px;} #yan-content #yan-categories h1.cat-396545015,#yan-content #yan-categories h2.cat-396545015{background-position:0 -900px;} #yan-content #yan-categories h1.cat-396545016,#yan-content #yan-categories h2.cat-396545016{background-position:0 -1000px;} #yan-content #yan-categories h1.cat-396545451,#yan-content #yan-categories h2.cat-396545451{background-position:0 -1100px;} #yan-content #yan-categories h1.cat-396545433,#yan-content #yan-categories h2.cat-396545433{background-position:0 -1200px;} #yan-content #yan-categories h1.cat-396545367,#yan-content #yan-categories h2.cat-396545367{background-position:0 -1300px;} #yan-content #yan-categories h1.cat-396545019,#yan-content #yan-categories h2.cat-396545019{background-position:0 -1400px;} #yan-content #yan-categories h1.cat-396545018,#yan-content #yan-categories h2.cat-396545018{background-position:0 -1500px;} #yan-content #yan-categories h1.cat-396545394,#yan-content #yan-categories h2.cat-396545394{background-position:0 -1600px;} #yan-content #yan-categories h1.cat-396545401,#yan-content #yan-categories h2.cat-396545401{background-position:0 -1700px;} #yan-content #yan-categories h1.cat-396545439,#yan-content #yan-categories h2.cat-396545439{background-position:0 -1800px;} #yan-content #yan-categories h1.cat-396545443,#yan-content #yan-categories h2.cat-396545443{background-position:0 -1900px;} #yan-content #yan-categories h1.cat-396545444,#yan-content #yan-categories h2.cat-396545444{background-position:0 -2000px;} #yan-content #yan-categories h1.cat-396546046,#yan-content #yan-categories h2.cat-396546046{background-position:0 -2100px;} #yan-content #yan-categories h1.cat-396545122,#yan-content #yan-categories h2.cat-396545122{background-position:0 -2200px;} #yan-content #yan-categories h1.cat-396545301,#yan-content #yan-categories h2.cat-396545301{background-position:0 -2300px;} #yan-content #yan-categories h1.cat-396545454,#yan-content #yan-categories h2.cat-396545454{background-position:0 -2400px;} #yan-content #yan-categories h1.cat-396545213,#yan-content #yan-categories h2.cat-396545213{background-position:0 -2500px;} #yan-content #yan-categories h1.cat-396545469,#yan-content #yan-categories h2.cat-396545469{background-position:0 -2600px;} #yan-content #yan-categories h1.cat-396546089,#yan-content #yan-categories h2.cat-396546089{background-position:0 -2700px;} #yan-content #yan-categories .bd{clear:left;} #yan-content #yan-categories ul{float:left;margin-right:20px;width:132px;} #yan-content #yan-categories ul.last{margin-right:0;} #yan-content #yan-categories li{display:block;zoom:1;margin:5px 0;} #yan-content #yan-categories li:after{content:'.';display:block;clear:both;height:0;visibility:hidden;} #yan-content #yan-categories li a{color:#069;background:none;padding-left:0;margin:0;} #yan-content #yan-categories a{font-size:93%;} #yan-content #yan-categories li span{background:transparent url(http://l.yimg.com/h/28130/images/all/question-bg-top.gif) repeat-x left -50px;border:1px solid #43b607;margin:-2px 0 -2px -6px;padding:1px 5px;font-size:93%;font-weight:bold;float:left;position:relative;} #yan-content #yan-categories li li{width:125px;margin-right:22px;} #yan-content #yan-categories li li a{margin:3px 0;} #yan-content #yan-category-advert-logo{display:inline;float:right;width:120px;height:30px;overflow:hidden;margin-right:-10px;margin-top:5px;} .yan-cat-overview{position:absolute;bottom:20px;right:20px;font-weight:bold;} .question-index #yan-main{border:1px solid #ccc;} .question-index #yan-main.simplepage{background:none;padding:12px 16px 16px 0;border-width:1px 0 0 0;} .question-index #yan-main.simpleerror{border:none;} #yan-question{background:url(http://l.yimg.com/h/28130/images/all/question-bg-top.gif) repeat-x 0 0;padding:20px 20px 20px 12px;zoom:1;} #yan-question:after{content:'.';display:block;clear:both;height:0;visibility:hidden;} .question-index .qa-container{clear:right;overflow:hidden;zoom:1;background:none;_margin-right:-13px;} #yan-question .hd{overflow:hidden;padding-bottom:4px;zoom:1;} #yan-question h2{color:#43B607;font-size:123.1%;font-weight:bold;float:left;line-height:1;margin:0;padding-bottom:0.6em;} #show-another{float:right;position:relative;padding-right:12px;text-align:right;} #show-another span{position:absolute;top:0;right:0;} #show-another:hover{text-decoration:none;} #yan-question .subject{font-size:161.6%;font-weight:bold;color:#000;line-height:1.2;margin:0 0 8px 0;padding:0;border:0;} #yan-question .profile{clear:left;} #yan-question h2.additional-details{font-weight:bold;font-size:100%;color:#333;float:none;padding-bottom:0;} .additional-date{color:#666;font-size:85%;margin:0;margin-bottom:7px;} .qa-container .content,.qa-container div.reference{margin-bottom:0.2em;} .qa-container h3.reference{color:#666;} .qa-container .meta{font-size:85%;color:#666;margin:1em 0 1.2em;} .qa-container .meta li{display:inline;} .qa-container .meta .answergroup a img{position:absolute;margin-left:-20px;} #yan-main .answer.best .answer-rating{clear:both;} #yan-main .answer.best .answer-rating dt,#yan-main .answer.best .answer-rating dd{float:left;} #yan-main .answer.best .answer-rating dd img{margin-left:5px;} #yan-main .answer.best .answer-rating dt{font-weight:bold;clear:left;} #yan-main .answer.best .answer-rating dd.desc{clear:left;margin-bottom:1em;float:none;zoom:1;} #yan-main .answer.best .answer-rating dt.desc{position:absolute;left:-9999em;} #yan-main div.best,#yan-answers .answer,#yan-answers-rushmore .answer{padding:12px 20px 14px 13px;zoom:1;} #yan-main .answer.best:after,#yan-answers .answer:after{content:".";display:block;height:0;clear:both;visibility:hidden;} #yan-answers-rushmore .answer:after{content:".";display:block;height:0;clear:both;visibility:hidden;} #yan-main .answer.best{background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 0;padding:20px 20px 14px 12px;} #yan-main .answer.best h2{margin-bottom:8px;color:#000;font-size:100%;font-weight:normal;} #yan-main .answer.best h2 span{font-weight:bold;font-size:108%;color:#43B607;} #yan-answers .collapsed,#yan-answers .shown{zoom:1;position:relative;} #yan-answers .collapsed li,#yan-answers .shown li{background:#fff url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 0;padding-top:1px;zoom:1;} #yan-answers .collapsed li li,#yan-answers .shown li li{background:none;padding-top:0;zoom:normal;} #yan-answers .answer.low-rating{background:url(http://l.yimg.com/h/28130/images/all/low-rating-bg.gif) repeat-x 0 0;} #yan-answers .answer.low-rating.hidden .qa-container{position:absolute;left:-9999px;width:0;overflow:hidden;zoom:1;} #yan-answers .answer.low-rating.hidden .profile{width:auto;} #yan-answers .answer.low-rating.hidden .profile .user-badge{display:none;} #yan-answers .answer.low-rating.hidden .profile span{font-size:77%;line-height:16px;display:inline;color:#069;width:auto;text-align:left;} #yan-answers .answer.low-rating.hidden .profile span span{font-size:100%;} #yan-answers .answer.low-rating.hidden .profile .photo{font-size:90%;line-height:16px;border:0;padding:0;width:16px;height:16px;margin:0 5px 0 10px;vertical-align:middle;} #yan-answers .answer.low-rating .toggle{font-size:77%;margin:0 10px 0 0;float:right;line-height:16px;} #yan-answers-rushmore .shown{zoom:1;position:relative;} #yan-answers-rushmore .shown li{background:#fff url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 0;padding-top:1px;zoom:1;} #yan-answers-rushmore .shown li li{background:none;padding-top:0;zoom:normal;} #yan-answers-rushmore .answer.low-rating{background:url(http://l.yimg.com/h/28130/images/all/low-rating-bg.gif) repeat-x 0 0;} #yan-answers-rushmore .answer.low-rating.hidden .qa-container{position:absolute;left:-9999px;width:0;overflow:hidden;zoom:1;} #yan-answers-rushmore .answer.low-rating.hidden .profile{width:auto;} #yan-answers-rushmore .answer.low-rating.hidden .profile .user-badge{display:none;} #yan-answers-rushmore .answer.low-rating.hidden .profile span{font-size:77%;line-height:16px;display:inline;color:#069;width:auto;text-align:left;} #yan-answers-rushmore .answer.low-rating.hidden .profile span span{font-size:100%;} #yan-answers-rushmore .answer.low-rating.hidden .profile .photo{font-size:90%;line-height:16px;border:0;padding:0;width:16px;height:16px;margin:0 5px 0 10px;vertical-align:middle;} #yan-answers-rushmore .answer.low-rating .toggle{font-size:77%;margin:0 10px 0 0;float:right;line-height:16px;} #yan-answers-rushmore{position:relative;margin:17px 0 19px 0;} #yan-answers-rushmore .hd h3{color:#67CE12;font-weight:bold;font-size:124%;} #yan-answers-rushmore .hd{overflow:hidden;position:relative;zoom:1;} #yan-answers-rushmore .hd form{float:right;position:relative;} body.js #yan-answers-rushmore .hd form .button{position:absolute;left:-9999em;} #yan-answers-rushmore .bd{margin-top:12px;background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 0 #fff;padding-top:1px;} #yan-question-tools{border:1px solid #ccc;margin-top:-1px;background:#eaeaea url(http://l.yimg.com/h/28130/images/all/actionbar-bg.gif) repeat-x 0 0;font-size:93%;zoom:1;} #yan-question-tools .label{line-height:26px;padding:0 10px;color:#666;border:0;} #yan-question-tools:after{content:".";display:block;height:0;clear:both;visibility:hidden;} #yan-question-tools li{border-left:1px dotted #ccc;float:left;} #yan-question-tools li.first-child{border-left:1px solid #ccc;margin-left:-1px;} #yan-question-tools li li.first-child{margin:0;border:0;} #yan-question-tools li a{display:block;line-height:26px;padding:0 10px 0 28px;text-decoration:none;} #yan-question-tools li a span{line-height:26px;} #yan-comment-link a{background:url(http://l.yimg.com/h/28130/images/all/actionbar.gif) no-repeat 10px -1090px;} #yan-comment-link a:hover{background:url(http://l.yimg.com/h/28130/images/all/actionbar.gif) no-repeat 10px -1185px;} #yan-comment-link.open,#yan-question-tools li:hover,#yan-comment-link.open,#yan-question-tools li.hover{background:#fff url(http://l.yimg.com/h/28130/images/all/actionbar-bg-on.gif) repeat-x 0 0;} #yan-question-tools li.label:hover,#yan-question-tools li.label{background:none;} body.js #yan-question-tools .menu span{background:url(http://l.yimg.com/h/28130/images/all/dropdown-arrow.gif) no-repeat right 10px;display:block;padding-right:12px;} body.js #yan-question-tools li ul{display:none;} body.js #yan-question-tools li .yui-overlay ul{display:block;} #yan-question-tools li ul{background:#fff;border:1px solid #ccc;clear:left;} #yan-question-tools li ul li{display:inline;float:none;border:0;white-space:nowrap;} #yan-question-tools li ul li a{text-align:left;padding:0 11px;background-image:none;border-top:1px dotted #ccc;float:none;display:block;line-height:1.8;} #yan-question-tools li ul li.first-child a{border:0;} #yan-question-tools li ul li a:hover{background-color:#ecf9dd;} #yan-question-tools li ul li a.rss-link{padding-left:26px;background-position:11px 50%;background:url(http://l.yimg.com/h/28130/images/all/syndication.gif) no-repeat -890px 50%;} #yan-question-tools li ul li a.rss-link:hover{background:#ecf9dd url(http://l.yimg.com/h/28130/images/all/syndication.gif) no-repeat -890px 50%;} #yan-save-question a{background:url(http://l.yimg.com/h/28130/images/all/actionbar.gif) no-repeat 10px -697px;} #yan-save-question a:hover{background-position:10px -797px;} #yan-edit-question a{background:url(http://l.yimg.com/h/28130/images/all/actionbar.gif) no-repeat 10px -897px;} #yan-edit-question a:hover{background-position:10px -997px;} .mail-friend a{background:url(http://l.yimg.com/h/28130/images/all/actionbar.gif) no-repeat 10px -497px;} .mail-friend a:hover{background-position:10px -597px;} .rss-link{background-image:url(http://l.yimg.com/h/28130/images/all/syndication.gif);background-repeat:no-repeat;background-position:-900px 3px;} #yan-comments{background:#f3f9eb url(http://l.yimg.com/h/28130/images/all/comments-bg.gif) repeat-x 0 bottom;border-top:1px solid #fff;padding:0 12px 19px 12px;} body.js #yan-comments{display:none;} body.js #yan-comments.show{display:block;} #yan-comments .comment{padding-top:20px;overflow:hidden;padding-bottom:20px;background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 bottom;zoom:1;} #yan-comments .none{padding-top:20px;padding-bottom:20px;background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 bottom;font-weight:bold;} #yan-comments .content{margin-left:99px;} #yan-comments .content a.report-abuse{background:#fff url(http://l.yimg.com/h/28130/images/all/rating-bg.gif) repeat-x 0 100%;border:1px solid #ccc;padding:0 3px 0 0;display:block;float:left;} #yan-comments .content a.report-abuse span{background:url(http://l.yimg.com/h/28130/images/all/rating.gif) no-repeat 3px -897px;padding:0 3px 0 20px;display:block;min-height:19px;line-height:19px;} #yan-comments .content a.report-abuse:hover span{background-position:3px -997px;} #yan-comments .content a.delete-comment{font-size:85%;display:block;padding-top:2px;} #yan-comments form{padding-top:17px;} #yan-comments form div{overflow:hidden;position:relative;zoom:1;} #yan-comments form div.count-chars{overflow:visible;position:static;zoom:none;} #yan-comments form h4{font-weight:bold;margin-bottom:0.4em;} #yan-comments form textarea{border:1px solid #7f9db9;width:444px;display:block;margin-bottom:0.4em;position:relative;clear:both;} .wide #yan-comments form textarea{width:605px;} #yan-comments form textarea.error{border-color:#f00;} #yan-comments p.signin{padding-top:17px;} #yan-comments form p.help{font-size:85%;float:left;} #yan-comments form .button{display:block;float:right;} .vote-signin{font-size:93%;margin:17px 0;} .vote-signin a{font-weight:bold;} #yan-main .answer-util,#yan-answers .answer-util,#yan-answers-rushmore .answer-util{clear:right;float:left;} #yan-main .answer-util ul,#yan-answers .answer-util ul,#yan-answers-rushmore .answer-util ul{overflow:hidden;background:#fff url(http://l.yimg.com/h/28130/images/all/rating-bg.gif) repeat-x 0 100%;float:left;border:1px solid #ccc;} #yan-main .answer-util li,#yan-answers .answer-util li,#yan-answers-rushmore .answer-util li{float:left;font-size:93%;} #yan-main .answer-util li a,#yan-main .answer-util.disabled li span,#yan-answers .answer-util li a,#yan-answers .answer-util.disabled li span,#yan-answers-rushmore .answer-util li a,#yan-answers-rushmore .answer-util.disabled li span,.qa-container .answer-util li.rate-up span.seo-rated{line-height:19px;} #yan-main .answer-util li.rate-down,#yan-answers .answer-util li.rate-down,#yan-answers-rushmore .answer-util li.rate-down{background:url(http://l.yimg.com/h/28130/images/all/vert-dot-bg.gif) repeat-y 0 0;padding-left:1px;} .qa-container .answer-util li.rate-up span.rate-button,.qa-container .answer-util li.rate-down span.rate-button,.qa-container .answer-util li a,#yan-reportthis a{float:left;cursor:pointer;} .qa-container .answer-util li.rate-up a span.rate-button,.qa-container .answer-util li.rate-down a span.rate-button,.qa-container .answer-util.disabled li.rate-up span,.qa-container .answer-util li.rate-up span.seo-rated,.qa-container .answer-util.disabled li.rate-down span,.qa-container .answer-util.disabled li.rate-down span{display:inline;padding-left:7px;padding-right:17px;background-repeat:no-repeat;background-image:url(http://l.yimg.com/h/28130/images/all/rating.gif);margin-right:8px;float:left;} .qa-container .answer-util li.rate-up span.seo-rated{background-position:0 -99px;padding-left:17px;padding-right:7px;margin-right:0;margin-left:8px;display:inline-block;} .qa-container .answer-util li.rate-up span.seo-rated strong{font-weight:bold;} .qa-container .answer-util .rate-up a span.rate-button{background-position:100% -199px;} .qa-container .answer-util .rate-up a:hover span.rate-button{background-position:100% -299px;} .qa-container .answer-util.disabled .rate-up span,.qa-container .answer-util.disabled .rate-up a:hover span{background-position:100% -99px;} .qa-container .answer-util.disabled .rate-up span.rated{background-position:100% -399px;} .qa-container .answer-util .rate-down a span.rate-button{background-position:100% -598px;} .qa-container .answer-util .rate-down a:hover span.rate-button{background-position:100% -698px;} .qa-container .answer-util.disabled .rate-down span,.qa-container .answer-util.disabled .rate-down a:hover span{background-position:100% -498px;} .qa-container .answer-util.disabled .rate-down span.rated{background-position:100% -798px;} .qa-container .answer-util .rate-up a span.rate-button span,.qa-container .answer-util .rate-down a span.rate-button span,.qa-container .answer-util.disabled li.rate-up span span,.qa-container .answer-util.disabled li.rate-down span span{position:absolute;margin:0;padding:0;left:-9999px;} .utils-container p{font-size:85%;color:#000;clear:both;padding-top:0.2em;margin:0;} .qa-container .answer-util .success,.qa-container .answer-util .loading{color:#090;} .qa-container .answer-util .failure{color:#c00;} .qa-container .answer-util li a:hover,#yan-reportthis a:hover{background:url(http://l.yimg.com/h/28130/images/all/reportit-bg-on.gif) repeat-x 0 0;text-decoration:none;} .qa-container .answer-util.disabled li.rate-up a:hover,.qa-container .answer-util.disabled li.rate-down a:hover{background:url(http://l.yimg.com/h/28130/images/all/rating-bg.gif) repeat-x 0 0;} #yan-reportthis{background:url(http://l.yimg.com/h/28130/images/all/rating-bg.gif) repeat-x 0 100%;padding:0;} #yan-reportthis{float:left;font-size:86%;border:1px solid #ccc;line-height:19px;} #yan-reportthis span,.qa-container .answer-util .flag-abuse span{background:url(http://l.yimg.com/h/28130/images/all/rating.gif) no-repeat 3px -1097px;padding:0 7px 0 20px;float:left;min-height:19px;line-height:19px;overflow:hidden;} li.report-abuse{float:right;*margin-top:-1.2em;} li.report-abuse a{background:url(http://l.yimg.com/h/28130/images/all/rating.gif) no-repeat 3px -900px;padding:0 0 0 20px;} li.report-abuse a:hover{background-position:3px -1000px;} .qa-container .answer-util .flag-abuse span{font-size:92%;} #yan-reportthis a span,.qa-container .answer-util .flag-abuse a span{background:url(http://l.yimg.com/h/28130/images/all/rating.gif) no-repeat 3px -897px;} .qa-container .answer-util .flag-abuse a:hover span,#yan-reportthis a:hover span{background-position:3px -997px;} #yan-seo-tools{width:360px;background:transparent url(http://l.yimg.com/h/28130/images/all/seo-thumbs-bg.gif) no-repeat 0 0;padding:3px 0 0;margin:7px 0;clear:both;overflow:hidden;zoom:1;} #yan-seo-tools div{background:url(http://l.yimg.com/h/28130/images/all/seo-thumbs-bg.gif) no-repeat 100% 100%;padding:0 0 3px 4px;overflow:hidden;zoom:1;} #yan-seo-tools div div{padding:0;} #yan-content #yan-seo-tools .buttons{padding:3px 0;float:left;margin:0 -62px 0 0;overflow:hidden;} #yan-seo-tools .buttons li{float:left;padding-right:4px;} #yan-seo-tools .buttons li a{display:block;width:26px;height:26px;text-indent:-5000px;overflow:hidden;background-image:url(http://l.yimg.com/h/28130/images/all/seo-thumbs.gif);background-repeat:no-repeat;} #seo-rate-u{background-position:0 -40px;} #seo-rate-d{background-position:0 -172px;} #seo-rate-u:hover,#seo-rate-u.on{background-position:0 -106px;} #seo-rate-d:hover,#seo-rate-d.on{background-position:0 -238px;} #yan-seo-tools div .container{float:right;width:279px;padding:0 8px 0 69px;background:none;} #yan-seo-tools div .container h4{padding-top:8px;font-weight:bold;font-size:93%;} #yan-seo-tools div .container h4.on{font-weight:normal;} #yan-seo-tools div .container h4.on strong{font-weight:bold;} #yan-seo-tools div .container form{padding-bottom:7px;overflow:hidden;zoom:1;} #yan-seo-tools div .container label{font-size:93%;display:block;line-height:1.5;margin-bottom:7px;} #yan-seo-tools div .container textarea{width:260px;display:inline;margin-bottom:7px;} #yan-seo-tools div .container form .count-chars{float:left;clear:right;font-size:85%;} #yan-seo-tools div .container form .count-chars span{font-weight:bold;} #yan-seo-tools div .container form .cta{float:right;clear:right;margin:0 3px 0 0;position:relative;} #yan-seo-tools div .container form .cta button{position:relative;} .qa-container .answer-util.seo{zoom:1;} .qa-container .answer-util.seo h4 span{font-weight:normal;} .vote-count{float:left;border:1px solid #ccc;background:#FFFFCD;font-size:124%;padding:2px 0 2px 2px;margin:7px 0;border-right:0;zoom:1;} .vote-count *{line-height:1;} .vote-count strong{border-left:1px solid #ccc;background:#fff;display:block;margin:-3px 0 -3px -3px;position:relative;} .vote-count strong.vote-border-kill{border:0;} .vote-count strong em{font-weight:bold;margin-left:5px;} .vote-container{overflow:hidden;zoom:1;position:relative;} #yan-answers{margin:17px 0 19px 0;} #yan-answers .hd h3{color:#666;float:left;} #yan-answers .hd h3 strong{color:#67CE12;font-weight:bold;font-size:124%;} #yan-answers .hd{overflow:hidden;position:relative;zoom:1;} #yan-answers .hd form{float:right;position:relative;} body.js #yan-answers .hd form .button{position:absolute;left:-9999em;} #yan-answers .bd{margin-top:12px;} #yan-answers p.bd{font-weight:bold;background:transparent url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 0;padding:12px 0;} #yan-answer-sort label{font-weight:bold;} #yan-noanswer{background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 0;padding:14px 0 0 0;overflow:hidden;zoom:1;} .yan-noanswer{margin-left:112px;} #yan-noanswer h4{font-weight:bold;margin-bottom:7px;} .other-questions{border-top:1px solid #D0D9E0;padding:11px 12px;} .other-questions .hd{color:#67CE12;font-size:116%;} .other-questions .hd a,.other-questions .hd span{font-weight:bold;} .question-index .other-questions .bd *{line-height:1.2;} .question-index .questions h3,.question-index .questions ul{margin-left:36px;} .question-index.questions h3{font-size:108%;} .other-questions li{margin:0 0 4px 1em;list-style:outside disc;font-size:93%;} #yan-interesting .hd a,#yan-interesting .hd span{background:url(http://l.yimg.com/h/28130/images/all/star-large.gif) no-repeat 0 -102px;padding-left:19px;color:#666;} #yan-interesting .hd span{background-position:1px -518px;} #yan-interesting .hd a:hover,#yan-interesting .hd a.starred,#yan-interesting .hd span.starred{background-position:0 -202px;text-decoration:none;} .js #yan-interesting{position:absolute;left:-9999px;} #yan-interesting p.bd{padding:0 19px;} #yan-interesting p.bd,#yan-interesting-menu p.bd{color:#666;} #yan-interesting p.bd a{background:url(http://l.yimg.com/h/28130/images/all/star-large.gif) no-repeat 0 -102px;padding-left:17px;} #yan-interesting p.bd a:hover,#yan-interesting p.bd a.starred{background-position:0 -202px;} #yan-interesting .hd a.remove-star,#yan-interesting p.bd a.remove-star{background-position:0 -302px;} #yan-interesting .hd a.add-star,#yan-interesting p.bd a.add-star{background-position:0 -402px;} #yan-interesting.mod .bd a,#yan-interesting-menu.mod .bd a{color:#678;} #yan-interesting-menu li a{font-size:93%;width:102px;overflow:hidden;display:block;white-space:nowrap;} #yan-interesting li img,#yan-interesting-menu li img{margin-right:4px;} #yan-interesting li.contact a,#yan-question-tools #yan-interesting-menu li.contact a{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/bud12_1.gif) no-repeat 22px 5px;} #yan-interesting li.blocked a,#yan-question-tools #yan-interesting-menu li.blocked a{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/blck12_1.gif) no-repeat 22px 5px;} #yan-interesting li.contact img,#yan-interesting-menu li.contact img,#yan-interesting li.blocked img,#yan-interesting-menu li.blocked img{margin-right:16px;} #yan-interesting li.you a,#yan-interesting-menu li.you a{font-weight:bold;} #yan-question-tools #yan-interesting-menu .show-more{margin:-0.5em 0 1em;display:block;} body.js #yan-interesting li,body.js #yan-interesting-menu li{display:none;} body.js #yan-interesting .show,body.js #yan-interesting .show li,body.js #yan-interesting-menu .show,body.js #yan-interesting-menu .show li{display:block;} #yan-related .yan-sponsored{background:#fff url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 bottom;border-top:1px #ccc solid;padding:21px 20px 30px 10px;font-size:100%;} .yan-sponsored .hd{text-align:right;margin-bottom:6px;font-weight:bold;font-size:85%;line-height:85%;} .yan-sponsored .hd a{color:#999;} .yan-sponsored .bd{padding-right:16px;} .yan-sponsored dt,.yan-sponsored h6{font-size:116%;line-height:116%;} .yan-sponsored a{color:#069;} .yan-sponsored em,.yan-sponsored strong{font-weight:bold;} .yan-sponsored em a{font-weight:normal;} .yan-sponsored dd,.yan-sponsored li{color:#333;margin-bottom:10px;line-height:138.5%;overflow:hidden;zoom:1;clear:both;} .yan-sponsored div{overflow:hidden;zoom:1;font-size:100%;} .yan-sponsored .img{float:left;display:inline;width:70px;margin:0 10px 0 0;} .yan-sponsored .img img{height:70px;display:block;margin:0 auto;} .yan-sponsored em{color:#008000;display:block;} .yan-sponsored em a{color:#060;} .yan-sponsored a.ft{display:block;color:#069;} .yan-sponsored.landscape{background:#ecf5fa;padding:5px;margin:10px 0;} .yan-sponsored .last{margin-bottom:0;} #yan-related #yan-sponsored{background:#fff;border:0;} #yan-related #yan-sponsored *{line-height:1.15;} #yan-related #yan-sponsored .hd{color:#999;text-transform:uppercase;font-size:85%;text-align:center;} #yan-related #yan-sponsored .bd{padding-right:16px;} #yan-sponsored dt{font-size:116%;} #yan-sponsored dt a{color:#069;} #yan-sponsored dt em{font-weight:bold;} #yan-sponsored dd{color:#666;margin-bottom:24px;} #yan-sponsored dd em{color:#008000;display:block;} #yan-sponsored dd em a{color:#060;} #yan-sponsored .ft{text-align:center;display:block;color:#069;} #yan-starthis a:hover{text-decoration:none;background:transparent;cursor:pointer;} #yan-starthis span{vertical-align:middle;line-height:26px;white-space:nowrap;} #yan-question-tools #yan-starthis a,#yan-question-tools #yan-starthis .cannot-star{padding-left:10px;display:block;overflow:hidden;} .js #yan-question-tools #yan-starthis a,.js #yan-question-tools #yan-starthis .cannot-star{padding-right:22px;background:transparent url(http://l.yimg.com/h/28130/images/all/dropdown-arrow.gif) no-repeat scroll 93% 10px;} .js #yan-question-tools #yan-starthis div a{background:none;} #yan-starthis .cannot-star{float:left;line-height:26px;text-align:center;padding:0 10px 0 31px;text-decoration:none;} #yan-starthis a span,#yan-starthis .cannot-star span{float:left;} #yan-starthis a .star,#yan-starthis .cannot-star .star{width:23px;min-height:19px;background:url(http://l.yimg.com/h/28130/images/all/star-border.gif) no-repeat 0 -96px;overflow:hidden;zoom:1;text-indent:-9999px;margin:0 0.2em;} #yan-starthis .cannot-star .star{background-position:0 -515px;} #yan-starthis a:hover .star,#yan-starthis a.starred .star{background-position:0 -196px;} #yan-starthis a.remove-star .star{background-position:0 -296px;} #yan-starthis a.add-star .star{background-position:0 -396px;} #yan-starthis a span.star-count,#yan-starthis .cannot-star span.star-count{background-image:none;display:inline;width:auto;text-indent:-9999px;overflow:hidden;zoom:1;} #yan-starthis a span.has-stars,#yan-starthis .cannot-star span.has-stars{text-indent:0;} #yan-interesting-menu p{margin-bottom:1em;} #yan-interesting-menu .star-status em{font-weight:bold;} #yan-interesting-menu .success em{color:#090;} span.highlight,.other-questions strong.highlight{font-weight:bold;} #yan-interesting-menu{background:#fff;border:1px solid #ccc;padding:1em;width:20em;overflow:hidden;} #yan-question-tools #yan-interesting-menu span{line-height:1.3;vertical-align:baseline;white-space:normal;} #yan-question-tools #yan-interesting-menu h2{font-size:123.1%;font-weight:bold;color:#666;margin-bottom:0.5em;} #yan-question-tools #yan-interesting-menu a{display:inline;float:none;padding:0;text-align:left;width:auto;line-height:1.3;} #yan-question-tools #yan-interesting-menu li a{display:block;white-space:nowrap;width:102px;overflow:hidden;zoom:1;} #yan-question-tools #yan-interesting-menu li{border:0;width:9em;padding-right:1em;margin:0.2em 0;} #yan-question-tools li li:hover,#yan-question-tools li li.hover{background:none;} #yan-question-tools #yan-interesting-menu span{line-height:1.3;float:none;} .utils-container{margin:0 0 1em 0;overflow:hidden;zoom:1;} .js .utils-container .thumb-status{position:absolute;left:-9999px;} .js .utils-container.show .thumb-status{position:static;left:0;} .qa-container .answer-util .loading{background:url(http://l.yimg.com/a/i/us/sch/gr2/saving_grnarial.gif) no-repeat 0 0.2em;text-align:left;text-indent:-9999px;} #yan-askmini div{overflow:hidden;zoom:1;} #yan-askmini form{overflow:hidden;zoom:1;} #yan-askmini h2{color:#666;font-size:138.5%;margin-bottom:0;} #yan-askmini .cta{clear:left;margin-top:22px;margin-bottom:0;} #yan-askmini form label span{font-weight:bold;} #yan-askmini textarea{overflow:auto;width:210px;height:50px;margin:4px 0;padding:3px;border:1px solid #7F9DB9;} .wide #yan-askmini textarea{width:279px;} #yan-askmini textarea.default{color:#666;} #yan-askmini .count-chars{font-size:93%;padding:0;float:left;margin-bottom:8px;} #yan-askmini .count-chars span{font-weight:bold;} #yan-group-actions a{background:transparent url(http://l.yimg.com/h/28130/images/all/actionbar.gif) no-repeat 10px -1281px;} #yan-question-tools #yan-group-actions-menu{width:17.2em;} #yan-question-tools #yan-group-actions .hide-scrollbars ul{overflow:hidden;} #yan-question-tools #yan-group-actions ul{overflow:auto;width:17em;list-style-type:none;} #yan-question-tools #yan-group-actions li{list-style-type:none;background:#fff;display:list-item;overflow:hidden;line-height:1.2;border-top:1px dotted #ccc;text-align:right;white-space:normal;} #yan-question-tools #yan-group-actions li.first{border-top:none;} #yan-question-tools #yan-group-actions li.inactive{color:#666;} #yan-question-tools #yan-group-actions li a{zoom:1;background:none;display:block;border:none;padding:5px 11px;line-height:1.2;text-align:left;} #yan-question-tools #yan-group-actions li a:hover{background-color:#ecf9dd;} #yan-question-tools #yan-group-actions li.inactive{padding:5px 11px;} #yan-question-tools #yan-group-actions li.inactive span{float:left;width:9em;text-align:left;background:none;padding:0;} #yan-question-tools #yan-group-actions li.inactive a{display:inline;padding:0;text-align:right;} #yan-question-tools #yan-group-actions li.inactive a:hover{background-color:transparent;text-decoration:underline;} #yan-question-tools #yan-group-event-add,#yan-question-tools #yan-group-event-remove,#yan-group-event-error,#yan-group-actions #yan-group-noadd{background:#fff;border:1px solid #ccc;clear:left;padding:10px;width:17em;} #yan-group-actions #yan-group-noadd{line-height:1.5;margin-bottom:0;} #yan-group-actions p#yan-group-noadd em{font-weight:bold;} #yan-group-actions p#yan-group-noadd a{display:inline;padding:0;background:none;line-height:1.5;} #yan-question-tools #yan-group-event-add a,#yan-question-tools #yan-group-event-remove a{float:left;line-height:1.4;background:none;padding:0;} #yan-question-tools #yan-group-event-add img,#yan-question-tools #yan-group-event-remove img{float:left;margin-right:10px;} #yan-group-event-add strong{color:#67ce12;} #yan-group-event-remove strong{font-weight:bold;} #yan-groups-sidebar .new em{font-size:83%;color:#000;background-color:#fc0;padding:1px 2px;vertical-align:top;margin-left:3px;} #yan-groups-sidebar li{overflow:hidden;margin-bottom:.5em;} #yan-groups-sidebar li img{float:left;margin-right:10px;} #askedInCountry{background:#fff url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x 0 100%;padding:0.5em;} #askedInCountry p{background:transparent url(http://l.yimg.com/h/28130/images/all/intl-flags.gif) no-repeat scroll 0 -60px;color:#666;font-size:85%;padding:0 0 0 24px;zoom:1;margin:0;} #askedInCountry .e1,#askedInCountry .us{background-position:0 -1520px;} #askedInCountry .ca{background-position:0 -352px;} #askedInCountry .qc{background-position:0 -1593px;} #askedInCountry .cf{background-position:0 -1593px;} #askedInCountry .mx{background-position:0 -1009px;} #askedInCountry .in{background-position:0 -790px;} #askedInCountry .uk{background-position:0 -1447px;} #askedInCountry .de{background-position:0 -498px;} #askedInCountry .fr{background-position:0 -644px;} #askedInCountry .it{background-position:0 -863px;} #askedInCountry .es{background-position:0 -571px;} #askedInCountry .br{background-position:0 -279px;} #askedInCountry .ar{background-position:0 -133px;} #askedInCountry .au{background-position:0 -206px;} #askedInCountry .nz{background-position:0 -1666px;} #askedInCountry .sg{background-position:0 -1228px;} #askedInCountry .my{background-position:0 -1082px;} #askedInCountry .ph{background-position:0 -1155px;} #askedInCountry .cn{background-position:0 -425px;} #askedInCountry .jp{background-position:0 -936px;} #askedInCountry .kr{background-position:0 -1301px;} #askedInCountry .tw{background-position:0 -1374px;} #askedInCountry .hk{background-position:0 -717px;} #askedInCountry .vn{background-position:0 -1885px;} #askedInCountry .id{background-position:0 -1739px;} #askedInCountry .th{background-position:0 -1812px;} #askedInCountry p a{color:#678;text-decoration:none;} #askedInCountry p a:hover{text-decoration:underline;} #yan-related #yan-today h3{font-size:100%;margin-top:0;} #yan-related #yan-today ul{margin:0 -12px -12px;padding:12px;overflow:hidden;zoom:1;} #yan-related #yan-today img{margin-bottom:5px;padding:2px;background:#fff;border:1px solid #ccc;display:block;} #yan-related #yan-today li img{position:absolute;top:0;left:0;} #yan-related #yan-today li{display:inline;float:left;width:88px;position:relative;margin-left:10px;text-align:center;} #yan-related #yan-today li.first{margin-left:0;} #yan-related #yan-today li a{font-weight:normal;} #yan-related #yan-today ul h3{font-size:85%;margin-top:40px;} .mod-external{background:#f0f8e6;padding:12px;margin:0 0 1em;} .mod-external .hd{font-size:123.1%;color:#333;margin:5px 0 12px 0;padding:0;} .mod-external h3{margin:0.7em 0;} .mod-external a{font-weight:bold;} #yan-answers.toggleContentHide .bd,#yan-answers.toggleContentHide #yan-answer-sort{display:none;} #yan-answers.from-search .hd{border:1px solid #ccc;background:#EAEAEA url(http://l.yimg.com/h/28130/images/all/actionbar-bg.gif) repeat-x;padding:8px 20px;} #yan-answers{position:relative;clear:left;} #yan-answers .toggleHide,#yan-answers .toggleShow{background:#fff url(http://l.yimg.com/h/28130/images/all/accordion-expand-button.gif);text-indent:-9999px;height:15px;width:15px;overflow:hidden;position:absolute;top:11px;right:20px;} #yan-answers .toggleShow{background-image:url(http://l.yimg.com/h/28130/images/all/accordion-collapse-button.gif);} #yan-answers.from-search .hd h3{float:none;} #yan-answers.from-search .hd form{border-top:1px solid #ccc;float:none;margin:8px -20px -8px;padding:3px 20px;text-align:right;background:#f4f4f4;} #yan-answers.from-search .bd{margin:0;} #yan-answers.from-search .bd li.first{background:none;} .question-index #yan-marketing-bar{border-bottom:1px solid #A1DE77;text-align:center;color:#000;padding:1em 0;font-size:120%;background-color:#E3F377;background-image:-moz-linear-gradient(top,#E3F377,#D3ED80);background-image:-webkit-gradient(linear,left top,left bottom,from(#E3F377),to(#D3ED80));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#E3F377,endColorstr=#D3ED80)";} .question-index #yan-marketing-bar span{font-weight:bold;} #video-splash{text-align:center;background-color:#249B0B;background-image:-moz-linear-gradient(top,#3AAF08,#09850B);background-image:-webkit-gradient(linear,left top,left bottom,from(#3AAF08),to(#09850B));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#3AAF08,endColorstr=#09850B)";font-size:150%;width:510px;height:310px;padding-top:20px;border:1px solid #053C00;overflow:hidden;position:relative;zoom:1;} #video-splash h3{margin-bottom:20px;padding-top:200px;color:#fff;font-weight:bold;font-size:120%;background:url(http://l.yimg.com/h/28130/images/all/bigsmiley.png) top center no-repeat;} #video-splash .cta{display:inline;} #video-splash li.first{margin-right:10px;} #video-splash ul{margin:0;} .questions{margin-bottom:1.54em;} .questions li{overflow:hidden;zoom:1;padding:6px;color:#666;position:relative;background:#fff;} .questions li div{overflow:hidden;zoom:1;background:#fff;} .questions li li{position:static;} .questions li.alt,.questions li.alt div{background:#f8f8f8;} .questions li.first h3{font-size:123.1%;font-weight:bold;} .questions li.second h3{font-size:108%;font-weight:bold;} .questions li a:visited{color:#896F97;} .questions li .cta a:visited{color:#fff;} .questions img{float:left;} .questions .contacts-action,.questions .best-answer,.questions h3,.questions ul,.questions p{margin-left:50px;} .questions p{margin-top:0;margin-bottom:0;color:#333;} .questions li .contacts-action,.questions li .best-answer{background:none;margin-top:4px;} .questions .contacts-action h4,.questions .best-answer h4{color:#000;margin-bottom:.25em;font-weight:bold;} .questions .contacts-action p,.questions .best-answer p{margin-left:0;} .questions .cta{margin-top:.5em;} .questions .meta{overflow:hidden;zoom:1;} .questions .meta li{display:inline;background:none;padding:0;font-size:93%;position:static;} .questions .meta li.stars a,.questions .meta li.stars .disabled{text-decoration:none;float:left;margin:0.1em 5px 0.5em 0;} .questions .meta li.stars .star{width:14px;text-indent:-9999px;background:url(http://l.yimg.com/h/28130/images/all/star.gif) no-repeat 100% -99px;overflow:hidden;zoom:1;} .questions .meta li.stars .has-stars{text-indent:0;} .questions .meta li.stars a:hover .star,.questions .meta li.stars .starred .star{background-position:100% -199px;} .questions .meta li.stars .remove-star .star,.questions .meta li.stars .remove-star:hover .star{background-position:100% -299px;} .questions .meta li.stars .add-star .star,.questions .meta li.stars .add-star:hover .star{background-position:100% -399px;} .questions .meta li.stars .disabled .star{background-position:100% -499px;} .questions .meta li.stars span span,.questions .meta li.stars a span{text-indent:-9999px;float:left;white-space:nowrap;overflow:hidden;zoom:1;} .questions .meta .contact a{padding-left:14px;background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/bud12_1.gif) no-repeat 0 50%;} .questions .meta .blocked a{padding-left:14px;background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/blck12_1.gif) no-repeat 0 50%;} .questions .meta .you a{font-weight:bold;} .questions .meta .contact span,.questions .meta .blocked span{position:absolute;left:-9999px;} .questions .meta a{color:#678;} .questions .remove-question{background:#ccc;position:absolute;top:10px;right:0;text-indent:-999em;width:20px;} .questions .remove{position:absolute;top:8px;right:5px;width:11px;height:11px;background:url(http://l.yimg.com/h/28130/images/all/close.png) no-repeat;text-indent:-9999px;overflow:hidden;} .questions li.loading{background-image:url(http://l.yimg.com/h/28130/images/all/spinner.gif);background-repeat:no-repeat;background-position:50% 50%;} .questions li.state-best-answer,.questions li.state-open,.questions li.state-voting{color:#AA5D00;} .user-index .my-questions h3,.user-index .my-questions ul,.user-index .my-questions p,.user-networkactivity .contacts-questions h3,.user-networkactivity .contacts-questions ul,.user-networkactivity .contacts-questions p,.user-networkactivity .contacts-questions .best-answer,.user-qa .my-questions h3,.user-qa .my-questions ul,.user-qa .my-questions p{margin-left:0;} .no-questions a{font-weight:bold;} .no-questions{margin:1em 0;} .profile{width:74px;margin-right:12px;float:left;text-align:center;display:inline;} .wide .profile{margin-right:25px;} .profile dt{font-weight:bold;font-size:90%;} .profile dd{margin:0;font-size:90%;} .profile .member{display:none;} .profile .photo{border:1px solid #ccc;background:#fff;padding:3px;overflow:hidden;zoom:1;} .expert .photo{border-color:#68CB18;} .profile .user{width:74px;display:block;text-align:center;overflow:hidden;zoom:1;} .profile .user .by{display:none;} .profile.contact .url .fn,#member-summary .contact h1{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/bud12_1.gif) no-repeat 0 2px;padding-left:14px;zoom:1;} .profile.blocked .url .fn,#member-summary .blocked h1{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/blck12_1.gif) no-repeat 0 2px;padding-left:14px;zoom:1;} #member-summary .contact h1,#member-summary .blocked h1{background-position:left center;padding-left:16px;} .profile .stats,.profile .network,.profile .contributions{display:none;} .network a{display:block;} .yui-module .network{display:block;} #yan-user-profile-card.yui-module{display:block;} #yan-user-profile-card.yui-module{background:#fff;border-style:solid;border-width:1px 2px 2px 1px;border-color:#ccc #999 #999 #ccc;color:#666;width:28.5em;text-align:left;} #yan-user-profile-card.yui-module .bd{padding:0;margin:0;overflow:hidden;zoom:1;font-size:93%;min-height:104px;_height:104px;_overflow:visible;} #yan-user-profile-card.yui-module .ft{background:#eee;border-top:1px solid #ccc;padding:0.2em;} #yan-user-profile-card.yui-module .ft ul{overflow:hidden;zoom:1;} #yan-user-profile-card.yui-module .ft ul li{float:left;padding-right:4px;} .network a.block-user{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/blck12_1.gif) no-repeat left center;padding-left:16px;} .network a.add-contact{background:url(http://l.yimg.com/a/i/nt/ic/ut/bsc/add12_thn_1.gif) no-repeat 0 50%;padding-left:16px;} #yan-user-profile-card.yui-module .contributions{margin:10px 10px -7px 0;display:block;overflow:hidden;zoom:1;background:url(http://l.yimg.com/a/i/us/sch/gr/grey_dot.gif) repeat-x 0 100%;padding-bottom:5px;} #yan-user-profile-card.yui-module .contributions dt{position:absolute;left:-5000em;} #yan-user-profile-card.yui-module .stats{overflow:hidden;zoom:1;margin:10px 10px 10px 0;display:block;} #yan-user-profile-card.yui-module .stats dd,#yan-user-profile-card.yui-module .stats dt{padding:0 10px 0.3em 0;margin-bottom:0.3em;font-size:100%;} #yan-user-profile-card.yui-module .stats dt{float:left;padding-right:4px;} #yan-user-profile-card.yui-module .stats dt.last,#yan-user-profile-card.yui-module .stats dd.last{background:none;} #yan-user-profile-card.yui-module .stats dd{overflow:visible;background:url(http://l.yimg.com/a/i/us/sch/gr/grey_dot.gif) repeat-x 0 100%;} #yan-user-profile-card.yui-module ul.best{float:left;position:relative;margin:10px 10px 10px 0;padding:0;} #yan-user-profile-card.yui-module li.best{color:#fff;padding:2.5em 2.5em 0.5em 10px;background:#68ce12 url(http://l.yimg.com/h/28130/images/all/stats.gif) no-repeat 100% 0;margin:0;} #yan-user-profile-card.yui-module li.best span{font-size:160%;font-weight:bold;color:#fff;padding:0.5em 0 1em 10px;position:absolute;top:0;left:0;} #yan-user-profile-card.yui-module li.total{background:#c1e7a1 url(http://l.yimg.com/h/28130/images/all/stats.gif) no-repeat 100% 100%;color:#390;padding:0.3em 0.3em 0.3em 10px;font-weight:bold;} .user-badge{display:block;} .voter-name{font-weight:bold;float:left;width:99px;color:#000;} #yan-user-profile-card.yui-module .stats dt.website{background:url(http://l.yimg.com/h/28130/images/all/url.gif) no-repeat;width:16px;height:16px;text-indent:-9999px;} .category-index #yan-content h1{font-size:139%;font-weight:bold;color:#666;padding-bottom:0.8em;margin:0;line-height:1.1;} .category-index #yan-content .header{padding:4px 5px;zoom:1;} .yan-sort{overflow:hidden;margin:10px 0;padding:0 10px 5px;line-height:1;font-size:93%;zoom:1;border-bottom:1px solid #ccc;} .yan-sort .active a,.yan-sort .active .selected{border-bottom:2px solid #43b607;padding-bottom:.2em;} .yan-sort h3,.yan-sort ul,.yan-sort li{float:left;padding:0 0 0 0.5em;margin:0 0.5em 0 0;} .yan-sort h3{font-weight:bold;padding:0;} .yan-sort li{border-left:1px solid #ccc;} .yan-sort li.first{border:none;padding-left:0;} .yan-sort span{position:absolute;left:-9999px;} .yan-sort span.selected{position:relative;left:0;display:block;} .yan-sort a{float:left;line-height:1;} .yan-sort .ascending a,.yan-sort .descending a{background:url(http://l.yimg.com/h/28130/images/all/sort.gif) no-repeat 100% 0;padding-right:16px;} .yan-sort .ascending a{background-position:100% -50px;} .yan-sort .default-ascending a,.yan-sort .default-descending a{background:url(http://l.yimg.com/h/28130/images/all/sort_faded.png) no-repeat 100% 0;padding-right:16px;} .yan-sort .default-ascending a{background-position:100% -50px;} #yan-topanswerer{margin:0 -5px 1em;} #yan-topanswerer div{background:#F0F8E6;overflow:hidden;padding:3px 5px;min-height:42px;zoom:1;_height:42px;} #yan-topanswerer h2{color:#666;float:left;font-weight:bold;font-size:100%;} #yan-topanswerer img{float:left;margin-right:5px;} #yan-topanswerer ul{float:left;clear:left;width:100%;} #yan-topanswerer li{display:inline;} #yan-topanswerer p{text-align:right;margin:0;} #yan-topanswerer p a{white-space:nowrap;} #yan-topanswerer li.user a{font-weight:bold;} #yan-topanswerer li.best-answers a{color:#E88A35;} #yan-related #yan-choose-best-answer,#yan-related #yan-extend-question,#yan-related #yan-report-quiz{padding-right:70px;background-repeat:no-repeat;background-position:100% 0;} #yan-related #yan-choose-best-answer em,#yan-related #yan-extend-question em,#yan-related #yan-report-quiz em{font-weight:bold;} #yan-choose-best-answer{background-image:url(http://l.yimg.com/h/28130/images/all/info-module-cup.png);} #yan-extend-question{background-image:url(http://l.yimg.com/h/28130/images/all/info-module-pencil.png);} #yan-report-quiz{background-image:url(http://l.yimg.com/h/28130/images/all/info-module-target.png);} #yan-earn-points{background-image:url(http://l.yimg.com/h/28130/images/all/earn-points-medal.gif);background-position:top right;background-repeat:no-repeat;} #yan-earn-points dl{overflow:hidden;zoom:1;margin-bottom:.5em;} #yan-earn-points dt{clear:left;float:left;width:58px;margin:0 1em .5em 0;text-align:right;} #yan-earn-points dd{float:left;width:215px;margin:0 0 .5em 0;} #yan-earn-points em{font-weight:bold;} #yan-featured-q{overflow:hidden;zoom:1;} #yan-related #yan-featured-q #yan-question{background:none;padding:0;margin-bottom:1em;} #yan-featured-q .qa-container{float:left;width:75%;} #yan-featured-q .profile{margin-right:10px;width:auto;} #yan-featured-q .avatar img{padding:5px;background-color:#fff;border:1px solid #ccc;} #yan-featured-q #yan-question h1{font-size:100%;} #yan-related #yan-kp{overflow:hidden;zoom:1;} #yan-related #yan-kp .bd .logo-link{float:left;margin:3px 7px 5px 0;} #yan-related #yan-kp .bd .logo-link img{max-width:106px;} #yan-related #yan-kp .bd .description{overflow:hidden;zoom:1;} #yan-related #yan-kp .fn,#yan-related #yan-kp .cat{font-weight:bold;} #yan-related #yan-filter form label{color:#666;font-size:116%;margin:0.7em 0;display:block;} #expert-sponsor{overflow:hidden;zoom:1;padding:5px;margin:0;background:#E6F5F5 url(http://l.yimg.com/h/28130/images/all/grad_b-b.gif) repeat-x top left;} #expert-sponsor .sponsered-question{color:#666;text-transform:uppercase;margin:0 0 0 5px;font-size:77%;} #expert-sponsor h3{font-size:123.1%;font-weight:bold;} #yan-advert-nt1{margin:8px 0;position:relative;text-align:center;z-index:1;} .ad-wrapper{display:inline-block;text-align:left;*display:inline;zoom:1;} .default-index h1{position:absolute;left:-9999px;} #yan-cr{margin-top:-10px;position:relative;} .default-index #yan-content h3.hd{font-size:108%;color:#7a7a7a;font-weight:bold;padding:0.5em 6px 0.5em 6px;background:#fff url(http://l.yimg.com/h/28130/images/all/carousel-bg-top.gif) repeat-x;} .default-index #yan-content .has-cr h3.hd{border-top:1px solid #ccc;} #yan-cr .bd{padding:1px;} #yan-cr .questions h3{padding-right:20px;} #yan-cr .info{border:1px solid #d5d5d5;background:#edf7fc url(http://l.yimg.com/h/28130/images/all/infometro28_1.gif) no-repeat 9px 9px;padding:0.5em 46px;color:#424242;margin:0 4px 1em;} #yan-cr .info em{display:block;font-weight:bold;font-size:108%;margin-bottom:0.2em;} #suggested-toggle{padding:0 20px 0 0;cursor:pointer;position:absolute;top:5px;right:5px;} #suggested-toggle:hover{text-decoration:underline;} #yan-cr .toggleHide{background:url(http://l.yimg.com/a/i/us/sch/gr2/button_hide.gif) no-repeat center right;} #yan-cr .toggleShow{background:url(http://l.yimg.com/a/i/us/sch/gr2/button_show.gif) no-repeat center right;} #yan-cr .toggleContentHide{display:none;} #yan-cr .toggleContentShow{display:block;} #content-toggle{display:block;padding:0 20px 0 0;cursor:pointer;color:#666;position:absolute;top:0.5em;right:5px;font-weight:normal;} #content-toggle:hover{text-decoration:underline;} .has-cr .questions li.first h3,.has-cr .questions li.second h3{font-size:100%;font-weight:normal;} #yan-answers-blog-info .bd{overflow:hidden;zoom:1;} #yan-answers-blog-info img{width:95px;float:left;margin-right:10px;} #yan-related #yan-answers-blog-info h3{margin-top:0;} #yan-featured-q h3.subject{font-size:109%;} .yan-content-heading{border-bottom:4px solid #3BAE08;margin-bottom:10px;margin-top:10px;} .yan-content-heading h2{color:#000;font-size:137%;} .yan-content-heading .alt{font-weight:normal;} .yan-content-heading .alt span,.yan-content-heading .alt em{font-weight:bold;} .tabbed-content{position:relative;zoom:1;} .tabs{margin-right:1em;line-height:1;zoom:1;} .tabs:after{content:".";display:block;clear:both;height:0;visibility:hidden;} .tabs li,#yan-nav li{float:left;margin-right:0.5em;padding-left:1em;position:relative;font-weight:bold;border:1px solid #3BAE08;background-color:#f3f9eb;border-bottom:0;} .tabs li a,.tabs li span{float:left;padding:7px 1em 6px 0;color:#666;} .tabs li.current{margin-bottom:-1px;} .tabs li.current a,.tabs li.current span{color:#fff;} #yan-nav li.current,#yan-nav li:hover,#yan-nav li.hover{border-color:#0D7A05;} #yan-nav li{padding-left:0;zoom:1;} #yan-nav li a{padding-left:1em;border:1px solid #f3f9eb;border-bottom:0;color:#333;} #yan-nav li.current a,#yan-nav li:hover a,#yan-nav li.hover a{border:1px solid #82C844;border-bottom:0;margin-bottom:-2px;padding-bottom:8px;} #yan-nav li:hover a,#yan-nav li.hover a{margin-bottom:-4px;padding-bottom:10px;} .tabs li,.tabs li a,.tabs li span,#yan-nav li.current a,#yan-nav li:hover a,#yan-nav li.hover a{-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;-ms-border-top-left-radius:6px;-ms-border-top-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px;} .tabs li.current,#yan-nav li.current a,#yan-nav li:hover,#yan-nav li.hover,#yan-nav li:hover a,#yan-nav li.hover a{color:#fff;background-color:#3BAE08;background-position:0 0;} #yan-nav li:hover ul a,#yan-nav li.hover ul a{background:none;} .tabs li.current span,.tabs li.current a,#yan-nav li:hover a,#yan-nav li.hover a{background-position:100% 0;} #yan-nav li.current li,#yan-nav li li,#yan-nav li div p a,#yan-nav li.current li a,#yan-nav li:hover li a,#yan-nav li.hover li a{border:none;} .tabs em{font-size:123.1%;font-weight:bold;display:block;} #yan-network{background:#e9f6fc;border:1px solid #d9e2e7;margin:10px 0;padding:5px;} #yan-network h2,#yan-network p{margin:0;} .info-scoringsystem #yan-content,.info-producttour #yan-content,.info-about #yan-content,.info-whatareanswersarticles #yan-content,.info-communityguidelines #yan-content,.info-communityguidelinesquiz #yan-content{border-top:1px solid #ccc;} .info-about #yan-content p{margin:0 0 1.08em;padding:0;} .info-about #yan-content p.first-child,.info-whatareanswersarticles #yan-content p.intro{font-size:108%;line-height:1.4;} .info-about #yan-content h2{border-top:4px solid #43b607;padding:14px 0 0 0;} .info-about #yan-content h3{font-size:108%;font-weight:bold;} .info-about #yan-content h3{padding-top:1em;background:url(http://l.yimg.com/h/28130/images/all/dotted-line.gif) repeat-x;font-size:108%;font-weight:bold;} .info-about #yan-content h3.first{background:none;padding:0;} .info-about #info-community{overflow:hidden;zoom:1;margin:0.5em 0.5em 1em;} .info-about #info-community div{float:left;width:39%;padding-left:10%;background:url(http://l.yimg.com/h/28130/images/all/smiles-50.png) no-repeat;} .info-about #info-community div.dont{background-position:0 -500px;} .info-about #info-community h4{font-weight:bold;} .info-about #info-community li{list-style:disc;margin-left:1.1em;} #yan-related .badges{padding-bottom:20px;} #yan-related .badges h2{line-height:1;margin:10px 0 20px;} #yan-related .badges img{border:1px solid #c0c0c0;margin:0 0 20px;} #yan-related .badges p{margin-bottom:0;} #yan-related .badges strong{font-weight:bold;} .yan-points th,.yan-points td,.yan-levels th,.yan-levels td{border-bottom:1px solid #ccc;padding:0.45em 10px 0.3em 10px;font-size:93%;} .yan-points,.yan-levels{margin:0 0 1em 0;} .yan-points caption{font-weight:bold;padding-bottom:0.5em;} .yan-points thead th,.yan-levels thead th{font-weight:bold;background:#f0f9e6;border:1px solid #44b608;border-width:1px 0;color:#44b608;} .yan-levels th,.yan-levels td{text-align:center;} .yan-points,.yan-levels{width:100%;} .yan-levels thead th{width:90px;} .yan-levels thead th.level{width:auto;} .yan-levels thead th.points{width:110px;} .yan-points .even,.yan-levels .even{background:#F5F5F5;border:1px solid #CCC;border-width:1px 0;} .yan-clarification{font-weight:bold;} .info-help #yan-content ol{padding:0 1.8em;margin-bottom:1.07em;} .info-help #yan-content ol li{list-style-type:decimal;list-style-position:outside;} .info-help #yan-content ol ul{padding:1em 0 0.47em 0;} .info-help #yan-content ol ul li{list-style-type:disc;} .info-help #yan-content dl{margin:0 0 1.07em 1em;zoom:1;} .info-help #yan-content dd{padding-left:1em;margin-bottom:0.53em;} .info-help #yan-content dl:after{content:".";display:block;clear:both;height:0;visibility:hidden;} .info-help #yan-content dl dl{clear:left;margin-bottom:0;padding:1em 0 0.47em 0;} .info-help #yan-content dt{float:left;font-weight:bold;margin-right:1ex;padding-left:1em;background:url(http://l.yimg.com/h/28130/images/all/bullets.gif) no-repeat -300px 0;} .info-help #yan-content h3{font-weight:bold;margin-bottom:0.53em;} .info-producttour #yan-content h2{color:#000;font-size:182%;text-transform:lowercase;} .info-producttour #yan-content h3{font-weight:bold;font-size:107%;margin-bottom:0;} .info-producttour .information{padding:7px 10px 10px;font-weight:bold;background:url(http://l.yimg.com/h/28130/images/all/producttour-background-631.png) no-repeat;} .info-producttour .information .wrapper{background:url(http://l.yimg.com/h/28130/images/all/producttour-images.png) no-repeat 100% 0;min-height:63px;_height:63px;padding-right:70px;} #yan-tour-answer .wrapper{background-position:100% -500px;} #yan-tour-discover .wrapper{background-position:100% -1000px;} .info-producttour #yan-content .mod{border:1px solid #B9DE92;} #yan-tour-ask .bd,#yan-tour-answer .bd,#yan-tour-discover .bd{padding:0 10px;} #yan-tour-ask,#yan-tour-answer,#yan-tour-discover{margin-bottom:20px;} #yan-what-we-like ul{margin:0 0 1em 1.55em;*margin:0 0 1em 2em;} #yan-what-we-like ul li{list-style-type:decimal;margin-bottom:.3em;} .information{background:#fff url(http://l.yimg.com/h/28130/images/all/report-header-background-631.gif) no-repeat;position:relative;background-position:left top;margin-bottom:1em;color:#000;} .information .ft{background:#fff url(http://l.yimg.com/h/28130/images/all/report-header-background-631.gif) no-repeat 0 100%;background-position:0 100%;height:10px;} .information h2,.information p{margin-bottom:0;} .information strong{font-weight:bold;} .information img{position:absolute;top:-10px;left:8px;} .information .bd{padding:14px 20px 0 100px;background:url(http://l.yimg.com/h/28130/images/all/com-mod.gif) no-repeat 14px 14px;min-height:85px;_height:85px;} .positive .bd{background-image:url(http://l.yimg.com/h/28130/images/all/com-mod-75px.gif);} .positive h2{color:#390;} .negative .bd{background-image:url(http://l.yimg.com/h/28130/images/all/com-mod-report.gif);} .negative h2{color:#C00;} .info-communityguidelines h3{font-weight:bold;padding-bottom:14px;} .yan-accordion{margin-bottom:14px;overflow:hidden;zoom:1;background:transparent url(http://l.yimg.com/h/28130/images/all/accordion-border.gif) repeat-x bottom;} .yan-accordion li{background:#FFF url(http://l.yimg.com/h/28130/images/all/accordion-bg.gif) repeat-x top;padding:0;margin:0;float:left;width:100%;} .yan-accordion h3{padding:14px;zoom:1;font-weight:bold;} .yan-accordion h3 a{display:block;background:transparent url(http://l.yimg.com/h/28130/images/all/accordion-expand-button.gif) no-repeat right;zoom:1;} .yan-accordion h3.open a{background-image:url(http://l.yimg.com/h/28130/images/all/accordion-collapse-button.gif);color:#333;} .yan-accordion h3 a:hover{text-decoration:underline;} .yan-accordion p{padding:0 14px 14px;} .yan-accordion p a{display:inline;} .yan-accordion li.last-child p{background:transparent url(http://l.yimg.com/h/28130/images/all/accordion-border.gif) repeat-x bottom;} .info-communityguidelines .hide{position:absolute;top:-20000px;overflow:hidden;zoom:1;} .info-communityguidelines .parent a,.info-communityguidelines .open a{text-decoration:none;} #yan-guidelines-dont .bd{background-image:url(http://l.yimg.com/h/28130/images/all/com-mod-report.gif);} .info-communityguidelines .dont-pullout{background:url(http://l.yimg.com/h/28130/images/all/warning_22x22.png) no-repeat;padding:0 30px;} .info-kudos #yan-content{border-top:1px solid #ccc;} .info-kudos #yan-related .bd{font-size:93%;} .info-kudos #yan-related li,.info-kudos #yan-content li{margin-bottom:1.4em;} .info-kudos #yan-content li{background:transparent url(http://l.yimg.com/h/28130/images/all/dotted-line.gif) repeat-x top;padding-top:1.4em;} .info-kudos #kudos-in-the-news li{background:transparent url(http://l.yimg.com/h/28130/images/all/dotted-line-green.gif) repeat-x bottom;padding-bottom:1em;margin-bottom:1em;} .info-kudos #kudos-in-the-news li.last-item{background:none;padding-bottom:0;margin-bottom:0;} .info-kudos #kudos-in-the-news li h3,.info-kudos #kudos-in-the-news li p{margin:0;} .info-kudos #kudos-submit strong{font-weight:bold;display:block;} .info-kudos #kudos-submit a{font-weight:bold;} .info-kudos #yan-related li cite{font-weight:bold;} .info-kudos h3{font-weight:bold;font-size:107%;margin-bottom:0.72em;} .info-kudos .author{font-size:85%;overflow:hidden;zoom:1;} .info-kudos .author img{vertical-align:middle;margin-right:5px;} .info-kudos .author span{font-weight:bold;} .yan-reward{overflow:hidden;margin-bottom:30px;zoom:1;} .yan-swag-description ol{margin:1em 20px;} .yan-swag-description ol li{list-style:decimal;color:#999;font-weight:bold;margin:10px 20px;} .yan-swag-description ol li p{color:#333;font-weight:normal;} .yan-reward .yan-swag-description{float:left;width:660px;margin-right:10px;padding-top:15px;background:#fff url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x top;} .yan-reward .yan-swag-downloads p{text-align:center;} .yan-reward .yan-swag-downloads,.yan-swag-downloads-guide,.yan-swag-downloads-guide-alt{width:256px;float:left;border:1px solid #ccc;padding:10px;} .yan-swag-downloads-guide,.yan-swag-downloads-guide-alt{width:113px;} .yan-swag-downloads-guide-alt{margin-left:8px;} .yan-guide-link a{background:url(http://l.yimg.com/h/28130/images/all/pdf_icon.gif) center left no-repeat;display:block;padding-left:17px;margin:5px 0 0 5px;font-size:0.8em;height:100%;line-height:1.6em;} .info-knowledgepartners #kp-list,.info-knowledgepartners #kp-candidates{background:transparent url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x scroll 0 0;padding-top:12px;} .info-knowledgepartners #kp-list{padding-bottom:12px;} .info-knowledgepartners #kp-list ul{overflow:hidden;zoom:1;padding-bottom:1px;} .info-knowledgepartners #kp-list li{border:1px solid #ccc;float:left;width:110px;height:54px;margin:0 5px 5px 0;} .info-knowledgepartners #kp-benefits-detail{margin-bottom:50px;} .info-knowledgepartners .yan-related p{padding-bottom:10px;} .info-knowledgepartners #yks-ce-featured-profile .ce-logo{display:block;float:right;margin:0 0 0.4em 5px;} .info-knowledgepartners #yks-ce-featured-profile p strong{font-weight:bold;} #flag-abuse h2 span,.appeal-flow h2 span{font-weight:normal;} #yan-yamster-flag,#yan-yamster-flag .ft{background:#fff url(http://l.yimg.com/h/28130/images/all/report-header-background-631.gif) no-repeat;} #yan-yamster-flag{margin:0.77em 0 1.54em;padding:0;} #yan-content #yan-yamster-flag p{margin-bottom:0.54em;} #yan-yamster-flag .bd{padding:14px 20px 4px 100px;background:url(http://l.yimg.com/h/28130/images/all/com-mod-report.gif) no-repeat 14px 14px;min-height:80px;_height:80px;} #yan-yamster-flag .ft{background-position:0 100%;height:10px;} #yan-community form{width:726px;border:none;background:#fff;} #flag-abuse h2,.appeal-flow h2{font-weight:bold;margin-top:1.43em;font-size:108%;color:#333;} #flag-abuse h2.first,.appeal-flow h2.first{margin-top:0;} .report-answer p{margin-bottom:0;} .report-answer a{font-weight:bold;} #yan-community-disclaimer p{font-size:93%;} #yan-community-disclaimer .yan-intellectual-property{font-size:85%;color:#666;} #yan-community-disclaimer strong{font-weight:bold;} #yan-community-disclaimer em{color:#c00;font-weight:bold;} .flag-textarea{margin:0 0 1.16em;} #yan-yamster-header,#yan-flags-matter{background:#fff url(http://l.yimg.com/h/28130/images/all/report-header-background-631.gif) no-repeat;} #yan-yamster-header .ft,#yan-flags-matter .ft{background:#fff url(http://l.yimg.com/h/28130/images/all/report-header-background-631.gif) no-repeat 0 100%;background-position:0 100%;height:10px;} #yan-yamster-header{position:relative;background-position:left top;margin-bottom:1.54em;color:#000;} #yan-flags-matter{padding:14px 20px 4px 150px;background:url(http://l.yimg.com/h/28130/images/all/com-mod.gif) no-repeat 14px 14px;min-height:100px;_height:100px;} #yan-yamster-flag h2,#yan-flags-matter h2{font-size:100%;color:#000;margin-bottom:0.54em;} #yan-flags-matter ul{margin:0 15px 0.23em 0;list-style-type:disc;} #yan-flags-matter ul{margin-bottom:0.69em;} #yan-flags-matter ul li{margin:0 0 0.23em 1.31em;list-style:disc;} #yan-flags-matter .last{margin-bottom:0;} #yan-flags-matter em{font-weight:bold;} #flag-abuse label,.appeal-flow label{font-weight:bold;} #flag-abuse label span,.appeal-flow label span{font-weight:normal;} .flag-textarea label{position:absolute;left:-9999px;} #flag-abuse textarea,.flag-textarea textarea,.appeal-flow textarea{display:block;height:85px;width:428px;} #appeals-reminder{font-size:138.5%;color:#333;} #appeal-details{height:85px;width:428px;} #yamster-instructions{background:#cfc;} #yan-flagging-accuracy{margin:0.31em 0 0;} #yan-flagging-accuracy ul{list-style-type:disc;margin:0 0 0.77em;} #yan-flagging-accuracy ul li{margin:0 0 0.77em;} #yan-flagging-accuracy ul p{display:inline;} #yan-flagging-accuracy h3{font-weight:bold;display:inline;} .declined,#yan-flagging-accuracy .report-inaccurately,#yan-content .error,h2.bad{color:#c00;} .accepted,#yan-flagging-accuracy .report-accurately,h2.good{color:#390;} #yan-flagging-accuracy strong{font-weight:bold;} #flag-abuse div div input{float:left;margin:0 8px 1em 0;} #yan-content #flag-abuse div div label,#yan-content #flag-abuse div div p{overflow:hidden;zoom:1;font-size:93%;} #flag-abuse .flag-textarea label{position:absolute;left:-9999px;} #yan-content .accepted-list,#yan-content .declined-list{margin:0 0 1.31em 2em;} #yan-content .accepted-list li,#yan-content .declined-list li{list-style:disc;} #yan-content .buttons{overflow:hidden;zoom:1;margin:1.31em 0 1.08em;} #yan-content .buttons .cta{float:left;margin:0 0.77em 0 0;background:none;padding:0;} #flag-abuse .buttons,.appeal-flow .buttons{margin:25px 0 0 0;} #yan-content .speech{zoom:1;overflow:hidden;margin-left:-25px;} #yan-content .speech div{float:left;position:relative;margin-top:20px;left:20px;border:0;background:url(http://l.yimg.com/h/28130/images/all/speech.gif) no-repeat 100% 100%;} #yan-content .speech div div{background-position:0 100%;margin-top:0;left:-20px;} #yan-content .speech div div div{background-position:0 0;top:-20px;left:0;} #yan-content .speech div div div div{background-position:100% 0;top:0;left:20px;padding:15px 20px 0 8px;width:438px;} #yan-content .speech h2{color:#666;font-size:123.1%;font-weight:bold;margin:0;} #yan-content .speech p{margin:0;} #captcha{margin:1em -14px;border:1px solid #ccc;border-width:1px 0;background:#f3f3f3;padding:1em;} .carousel{width:629px;position:relative;overflow:auto;*overflow:hidden;} .carousel div.clip{text-align:left;position:relative;} .carousel div.clip ul li{list-style:none;margin:0;padding:10px 10px;display:none;background:#fff url(http://l.yimg.com/h/28130/images/all/carousel-bg-top.gif) repeat-x;} .carousel div.clip ul li.first{display:block;} .carousel div.clip{height:18em;} .carousel.js.vert div.clip{height:8em;} .carousel.js.horz div.clip ul{width:100000px;} .carousel.js.horz div.clip ul ul{width:auto;} .carousel.js.horz div.clip ul li{float:left;position:absolute;_background:#fff url(http://l.yimg.com/h/28130/images/all/carousel-bg-top.gif) repeat-x;display:block;} .carousel.js.horz div.clip ul li li{float:none;position:static;background:transparent;} .carousel ul.pagination{position:absolute;top:5px;right:5px;} .carousel ul.pagination li{float:left;margin-right:3px;} .carousel ul.pagination li button{height:10px;width:10px;position:static;border:1px solid #999;background:#fff;} .carousel ul.pagination li.current button{background:#ccc;cursor:default;} .carousel button{background:url(http://l.yimg.com/h/28130/images/all/carousel.gif);position:absolute;bottom:5px;width:16px;height:16px;padding:0;border:none;text-indent:-2em;cursor:pointer;display:block;text-indent:-500em;} .carousel .btnprev{right:45px;background-position:0 -100px;} .carousel .btnprev:hover,.carousel .btnprevhover{background-position:0 -200px;} .carousel .btnnext{right:5px;background-position:0 -300px;} .carousel .btnnext:hover,.carousel .btnnexthover{background-position:0 -400px;} .carousel .btnpause{right:25px;background-position:0 -500px;} .carousel .btnpause:hover,.carousel .btnpausehover{background-position:0 -600px;} .carousel button.btnprevdisabled{background-position:0 -100px;} .carousel button.btnnextdisabled{background-position:0 -300px;} .carousel button.btnpausedisabled{background-position:0 -700px;} .carousel button.btnpausedisabled:hover,.carousel button.btnpausedisabledhover{background-position:0 -800px;} .btnpause{right:22px;} .carousel{background:#fff url(http://l.yimg.com/h/28130/images/all/carousel-bg-top.gif) repeat-x;border:1px solid #ccc;} .carousel .clip{background:url(http://l.yimg.com/h/28130/images/all/carousel-bg-btm.gif) repeat-x 0 100%;} #yan-content .carousel ul.pagination{margin:0;} #yan-bestof ul li li{padding:0;} #yan-bestof h3{font-size:130%;font-weight:bold;} #yan-bestof .qa-container{margin-bottom:10px;} #yan-bestof .qa-container,#yan-bestof .wrapper,#yan-bestof div.clip ul.actions{overflow:hidden;zoom:1;width:auto;} #yan-bestof .qa-container p,#yan-bestof .meta{margin:0;} #yan-bestof .avatar,#yan-bestof .logo{float:left;margin-right:10px;} #yan-bestof .actions li{font-weight:bold;border-right:1px solid #000;padding-right:1em;margin-right:1em;font-size:93%;display:inline;} #yan-bestof .meta li{display:inline;float:left;margin-right:0.2em;height:16px;line-height:16px;font-size:108%;} #yan-bestof .actions .last{margin-right:0;padding-right:0;border:0;} #yan-bestof .actions .mail{padding-left:20px;background:url(http://l.yimg.com/h/28130/images/all/actionbar.gif) no-repeat 0 -503px;font-weight:normal;} #yan-bestof .meta .thumbs-down{background:url(http://l.yimg.com/h/28130/images/all/rating.gif) no-repeat 100% -500px;padding-right:15px;} #yan-bestof .meta .thumbs-up{background:url(http://l.yimg.com/h/28130/images/all/rating.gif) no-repeat 100% -100px;padding-right:15px;} #yan-bestof .qa-container .meta .stars .star-count{position:absolute;left:-9999px;} #yan-bestof .qa-container .meta .stars .has-stars{position:static;} #yan-bestof .qa-container .meta .stars{background:url(http://l.yimg.com/h/28130/images/all/star.gif) no-repeat 100% -499px;padding-right:12px;} #yan-bestof .meta .thumbs-up span,#yan-bestof .meta .thumbs-down span,#yan-bestof .qa-container .meta .stars .star{position:absolute;left:-9999px;} .js.ask-answer #bd{position:relative;} .js .acts-as-label{cursor:default;} #yan-all-cats ul{border:0;margin-left:2em;font-size:100%;} #yan-ask-allcats select{width:191px;font-size:85%;margin-right:4px;} #yan-answer-entertext .content{margin:7px 0;} #yan-ask-autocat label{font-size:93%;color:#333;padding-left:12px;line-height:15px;} #yan-ask-autocat p,#yan-ask-allcats p{font-size:85%;padding:12px 0;margin:0;} #yan-ask-autocat li{padding:3px 3px 3px 7px;} #yan-ask-autocat li.alt{background:#f5f5f5;} .question-answer .ask-flow label{color:#333;} .question-answer .ask-flow label span{display:block;color:#666;} .ask-flow .answergroup img{float:left;margin:0 5px 0 0;} .ask-flow .answerWithGroupOptions label{display:inline;} .ask-flow .answerWithGroupOptions select{width:180px;} .ask-flow .answerWithGroupOptions select option.disabled{color:#999;} .ask-flow select option{font-size:95%;} .ask-flow .checkboxes{padding:12px 0 0 0;} .ask-flow .checkboxes h3{font-weight:bold;margin-bottom:7px;} .checkboxes label{display:inline;color:#333;font-weight:normal;font-size:93%;} .checkboxes li{padding-bottom:5px;padding-left:5px;} .ask-flow label strong,.acts-as-label h3{font-weight:bold;color:#333;} .acts-as-label p{font-weight:normal;} #yan-answer-search-inline ul label{font-weight:normal;color:#333;padding-left:21px;display:inline;} #yan-answer-search-inline fieldset{position:relative;background:#fff;} #yan-answer-search-inline{background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x;overflow:hidden;padding:17px 0;border:0;width:230px;position:absolute;bottom:0;right:-244px;} #yan-answer-search-inline ul{margin:0 0 7px;zoom:1;overflow:hidden;} #yan-content #yan-answer-search-inline .buttons{margin:1em 0 0;} #yan-answer-search-inline li{float:left;padding-right:5px;} #yan-answer-search-inline li label,#yan-answer-search-inline li input{vertical-align:middle;font-weight:bold;font-size:93%;} #yan-answer-search{padding:3px;width:200px;} #l-yan-ask-s-y{background:url(http://l.yimg.com/h/28130/images/all/y-and-wiki.gif) no-repeat 0 -118px;} #l-yan-ask-s-wk{background:url(http://l.yimg.com/h/28130/images/all/y-and-wiki.gif) no-repeat 0 -50px;} #yan-answer-entertext textarea{margin-bottom:14px;} #yan-answer-entertext label,.acts-as-label{margin-bottom:5px;} #yan-answer-entertext label strong,.acts-as-label strong{display:block;} #yan-answer-entertext label span,.acts-as-label p{font-weight:normal;font-size:86%;} #yan-answer-preview dl{float:left;} #yan-answer-preview dt{font-weight:bold;margin-bottom:7px;font-size:107%;} #yan-answer-preview dd{margin-bottom:8px;} .ask-flow .legal{font-size:77%;color:#666;} .ask-flow .buttons{clear:left;} .ask-flow .buttons .cta{float:left;margin-right:5px;} .ask-flow .buttons .right{float:right;margin-right:0;} .ask-flow #yan-ask-details-lbl{margin-top:2.5em;} .ask-flow .content{margin:0 0 12px;} #yan-additional-preview .question-details{margin:0;padding:0;background:none;} .js.question-ask #yan-content{position:relative;} #yan-qt{position:absolute;background:#fefceb url(http://l.yimg.com/h/28130/images/all/qt-bg.png) no-repeat 0 0;border:0;width:244px;margin:0;padding:0;left:630px;z-index:1;} .js #yan-qt.closed{display:none;} #yan-qt .ft{background:url(http://l.yimg.com/h/28130/images/all/qt-bg.png) no-repeat 0 100%;height:10px;position:relative;bottom:-4px;} #yan-qt .bd{padding:12px;min-height:60px;_height:60px;} .js #yan-qt .bd{padding:15px 17px 0 60px;} #yan-qt .bd strong,#yan-qt .bd a{font-weight:bold;} #yan-qt .bd a.action{display:block;} #yan-qt .bd p{margin-bottom:7px;} #yan-qt .bd p.last{margin-bottom:0;} #yan-qt .hd{display:block;width:66px;height:82px;position:absolute;background:transparent url(http://l.yimg.com/h/28130/images/all/qt-globe.png) no-repeat 0 0;left:-13px;top:8px;} #yan-qt.qt-error .hd,#yan-qt.qt-error .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-error.gif) no-repeat 0 0;height:40px;} #yan-qt.qt-error .bd{min-height:30px;_height:30px;} .js #yan-qt.qt-bubble .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-punctuation.gif) no-repeat 0 0;} .js #yan-qt.qt-penciltip .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-penciltip.gif) no-repeat 0 0;} .js #yan-qt.qt-penciltip-tick .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-penciltip-tick.gif) no-repeat 0 0;} .js #yan-qt.qt-eraser .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-eraser.gif) no-repeat 0 0;} .js #yan-qt.qt-magnify .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-magnify.gif) no-repeat 0 0;} .js #yan-qt.qt-vitality .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-vitality.gif) no-repeat 0 0;} #yan-qt.qt-info .hd{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-info.gif) no-repeat 0 0;} .js #yan-qt-close{background:transparent url(http://l.yimg.com/h/28130/images/all/qt-close.gif) no-repeat 0 0;width:8px;height:8px;text-decoration:underline;text-indent:-5000px;position:absolute;top:8px;right:8px;overflow:hidden;} #yan-similar-questions{margin-top:120px;overflow:hidden;zoom:1;} #yan-similar-questions h2{position:absolute;left:-9999px;} #yan-similar-questions .questions h3,#yan-similar-questions .questions p,#yan-similar-questions .questions .meta{margin-left:40px;} #yan-similar-questions .questions .meta{line-height:1;} #yan-similar-questions h3{font-size:116%;} #yan-similar-questions .meta li,#yan-similar-questions p{font-size:85%;} .question-answerbest .count-chars{color:#666;margin-bottom:2em;} #yan-select-best-answer #answer-rating label{display:inline;} #answer-rating-container{margin-bottom:7px;overflow:hidden;zoom:1;padding:0 0 7px;} #answer-rating div{margin-bottom:.5em;} .js #yan-select-best-answer #yan-qt{margin-top:0;} #yan-qt{margin-top:20px;} #yan-qt .bd{padding:15px 17px 5px 60px;} #yan-select-best-answer #yan-qt.qt-penciltip .hd{display:block;background:transparent url(http://l.yimg.com/h/28130/images/all/qt-penciltip.gif) no-repeat 0 0;height:66px;left:-13px;position:absolute;top:8px;width:66px;} .ask-flow .sub-text p{margin:0;} .ask-flow .sub-text a{font-weight:bold;} .ask-flow .sub-text strong{font-weight:bold;} #yan-content .ask-flow .buttons{margin:1.82em 0 0;} .js #answer-rating{background:#fff url(http://l.yimg.com/h/28130/images/all/rating-bg.gif) bottom left repeat-x;width:119px;float:left;border:1px solid #ccc;height:23px;} .js #answer-rating li{display:inline;_zoom:1;_overflow:hidden;float:left;height:19px;padding:2px 3px;border-right:1px solid #ccc;} .js #answer-rating #rating5{border-right:0;} .js #answer-rating input{position:absolute;z-index:-1;} .js #answer-rating label{background:none;padding:0 2px;} .js #rating-text{background:#fff url(http://l.yimg.com/h/28130/images/all/rating-bubble.gif) top left no-repeat;padding-left:10px;float:left;margin:0;height:25px;visibility:hidden;color:#666;font-weight:bold;} .js #rating-text span{background:#fff url(http://l.yimg.com/h/28130/images/all/rating-bubble.gif) top right no-repeat;line-height:2;padding:6px 14px 7px 5px;_padding-top:0;_padding-bottom:0;_zoom:1;} #yan-bestanswer-feedback{width:90%;display:block;} .search-index #hd{border-bottom:1px solid #DCDCDC;} .search-index #yan-search-box{background:url(http://l.yimg.com/h/28130/images/all/grad_gr-w.png) repeat-x top left;overflow:hidden;zoom:1;padding-bottom:2.2em;} .search-index #yan-content{width:480px;float:left;margin:0 10px;border-top:4px solid #44B608;} .search-saved #yan-content{width:727px;float:left;} .search-saved #yan-content .content-internal{border-top:4px solid #44B608;} .search-index #yan-related,.search-saved #yan-related{width:225px;float:left;} #yan-search-options{width:220px;float:left;font-size:93%;overflow:hidden;} #yan-search-options .mod{padding:10px;background-color:#F0F8E6;border-top:1px solid #ccc;margin-bottom:1em;overflow:hidden;} .search-index .questions li,.search-saved .questions li{margin-bottom:.5em;padding:0;} .search-index .questions h3,.search-index .questions ul,.search-index .questions p,.search-saved .questions h3,.search-saved .questions ul,.search-saved .questions p{margin-left:38px;} .search-index .questions li h3,.search-saved .questions li h3{font-size:123.1%;} .search-index .questions .alt,.search-index .questions .alt div,.search-saved .questions .alt,.search-saved .questions .alt div{background:none;} .search-index .highlight,.search-saved .highlight{font-weight:bold;} #seach-box-module-outer-wrapper{margin-left:230px;} #seach-box-module h1{margin:0.75em 0 0.3em;color:#333;} #seach-box-module form,#seach-box-module form fieldset{display:inline;} #seach-box-module form{line-height:1em;margin-right:20px;vertical-align:middle;float:left;} #seach-box-module form legend{position:absolute;zoom:1;} #seach-box-module #keywords_filter{vertical-align:middle;padding:2px;} #seach-box-module #yan-p{vertical-align:middle;width:335px;padding:2px;margin-right:5px;} #seach-box-module #yan-p.error{border:1px solid #f00;padding:4px;} #seach-box-module .advanced-search{float:left;margin-top:5px;} #seach-box-module .advanced-search a{font-size:85%;} .search-index legend span{position:absolute;left:-9999em;} .search-index #yan-related .yan-sponsored,.search-saved #yan-related .yan-sponsored{border-top:none;padding:0 12px 1em;} #yan-search-filter h2 span{display:block;font-weight:normal;font-size:81.3%;margin-top:.5em;color:#333;} #yan-search-filter form{margin:0 -10px;} #yan-search-filter fieldset,#yan-search-filter .filter-selection div{padding:6px 10px 3px;border-top:1px dotted #ccc;} #yan-search-filter fieldset.first{padding:0 10px 3px;border-top:none;} #yan-search-filter .filter-selection{padding:0;border:none;} #yan-search-filter .save-selection{border:none;} #yan-search-filter h3,#yan-search-filter label.heading{font-weight:bold;color:#666;margin-bottom:10px;} #yan-search-filter label{display:block;margin-bottom:4px;} #yan-search-filter select,#yan-search-filter input{margin-bottom:7px;} #yan-search-filter select{max-width:200px;} #yan-search-filter option.disabled{color:#999;} .js #yan-search-filter .category-selection h3{padding:4px 35px 5px 0;margin-bottom:5px;} #yan-search-filter .category-selection h3.loading{background:url(http://l.yimg.com/h/28130/images/all/spinner.gif) no-repeat top right;} #yan-search-filter .category-selection ul{margin-bottom:.5em;} #yan-search-filter .category-selection li{background:transparent url(http://l.yimg.com/h/28130/images/all/bullets_vertical.gif) no-repeat scroll 0 -443px;padding:0 0 0 10px;margin-bottom:2px;} #yan-search-filter .category-selection .category-buttons{padding:0 0 3px;border-bottom:0;} #yan-search-filter #reset-button{padding:0 0 0 16px;margin:0;background:transparent url(http://l.yimg.com/h/28130/images/all/bullets.gif) no-repeat -903px 0;border:none;cursor:pointer;color:#069;} #yan-search-filter #reset-button span{background:none;padding:0;margin:0;} form.advanced-search-flow .category-selection ul{float:left;} form.advanced-search-flow .category-selection li{float:left;margin-right:5px;} form.advanced-search-flow #yan-category-tool{float:left;margin-right:5px;} #yan-content form.advanced-search-flow .category-buttons{float:left;margin:0;} form.advanced-search-flow #yan-category-tool select{margin-right:5px;} form.advanced-search-flow .category-buttons input{background:none;border:none;cursor:pointer;color:#069;} #yan-search-filter .category-selection select{width:200px;} #yan-search-filter .save-selection{margin:0 10px 5px;} #yan-search-filter .save-selection label{display:inline;} #yan-search-filter .save-selection input{margin:0 5px 0 0;} #yan-search-filter .buttons{overflow:hidden;zoom:1;padding:6px 10px 10px;} #yan-search-filter .buttons .cta{float:left;margin:0 8px 0 0;} #yan-search-options #yan-syndication{padding:6px 10px 3px;} #yan-search-options #yan-syndication ul li{float:none;border:none;margin:0 0 .5em 0;} #yan-search-filter .add-saved-search-wrapper{border-top:10px solid #fff;} #yan-search-filter .add-saved-search{border-top:1px solid #ccc;} .add-saved-search .cta{margin:0;} #search-did-you-mean span{font-size:123.1%;color:#c00;font-weight:bold;} .search-suggestions{margin-bottom:2.5em;} .search-suggestions h2{color:#333;} .search-suggestions ul{margin-left:70px;margin-bottom:1em;} .search-suggestions ol{margin-left:30px;margin-bottom:1em;} .search-suggestions ul li{background:url(http://l.yimg.com/h/28130/images/all/bullets_vertical.gif) no-repeat 0 -442px;padding:0 0 0 10px;margin-bottom:.3em;} .search-suggestions ol li{list-style-type:decimal;margin-bottom:.5em;} .search-suggestions h3{font-weight:bold;} #yan-content #search-no-results{margin:10px 0 1em;padding:5px 10px;overflow:hidden;padding-left:40px;background:#F8DADA url(http://l.yimg.com/h/28130/images/all/warning_22x22.png) no-repeat 8px .5em;color:#333;} #search-no-results .last{margin-bottom:0;} #search-no-results p span{display:block;} #search-no-results p span em{font-weight:bold;} #yahoo-search-module{background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x;zoom:1;} #yahoo-search-module .wrapper{background:url(http://l.yimg.com/h/28130/images/all/ylogo-46x27.png) no-repeat 30px 20px;padding-top:20px;padding-left:110px;} #yahoo-search-module label{position:absolute;left:-9999px;} #yahoo-search-module #yahoo-search-query{font-size:108%;font-weight:bold;vertical-align:middle;width:60%;padding:2px;} #yahoo-search-module h2{font-weight:bold;font-size:123.1%;color:#43B607;} #yahoo-search-module form{margin-bottom:1em;} #yahoo-search-module h3{font-weight:bold;} #yahoo-search-module ul{overflow:hidden;zoom:1;margin:5px 0 20px;} #yahoo-search-module li{*display:inline;} #yahoo-search-module li div{float:left;width:49%;margin-bottom:0.5em;} #yahoo-search-module li.row div{clear:both;} #search-yahoo-results{border-top:1px dotted #ccc;background:url(http://l.yimg.com/h/28130/images/all/carousel-bg-top.gif) repeat-x top left;padding:10px 14px 0;} #search-yahoo-results h2{font-weight:normal;float:left;width:360px;margin-bottom:1em;} #search-yahoo-results h2 span{font-weight:bold;} #search-yahoo-results p.meta{float:right;font-size:85%;margin-top:4px;width:90px;text-align:right;} #search-yahoo-results ol{clear:both;list-style-type:decimal;} .search-advanced #yan-content form legend span{position:absolute;left:-9999px;} .search-advanced #yan-content .filter-selection div,.search-advanced #yan-content .category-selection,.search-advanced #yan-content .match-in,.search-advanced #yan-content .add-saved-search{border-top:1px dotted #ccc;padding:1em 0;} .search-advanced #yan-content .category-selection div{border:none;} .search-advanced #yan-content .add-saved-search .checkbox input,.search-advanced #yan-content .email-saved-searches .checkbox input{float:left;margin:0;width:auto;} .search-advanced #yan-content .add-saved-search .checkbox label,.search-advanced #yan-content .email-saved-searches .checkbox label{font-weight:normal;display:block;vertical-align:middle;} .search-advanced #yan-content .email-saved-searches .checkbox label span{font-weight:bold;} .search-advanced #yan-content .add-saved-search input{width:25em;} .search-advanced #yan-content .email-saved-searches label,.search-advanced #yan-content .email-saved-searches input,.search-advanced #yan-content .add-saved-search label,.search-advanced #yan-content .add-saved-search input{margin-left:2em;margin-bottom:0.4em;} .search-advanced #yan-content .keywords div{overflow:hidden;zoom:1;padding:0.2em 0;} .search-advanced #yan-content .keywords label{float:left;width:15em;font-weight:normal;} .search-advanced #yan-content .keywords .main label{font-weight:bold;display:block;float:none;} .search-advanced #yan-content .keywords .main input{width:35em;margin-bottom:1em;} .search-advanced #yan-content .keywords{padding-bottom:1em;} .search-advanced #yan-content form label,.search-advanced #yan-content form h3{display:block;font-weight:bold;margin-bottom:1em;} .search-advanced #yan-content .keywords input{width:20em;padding:0.2em;} .search-advanced #yan-content .category-selection div{padding:0;} #search-did-you-mean{margin-top:10px;} #saved-search-wrapper{width:230px;float:left;margin-right:-1px;} .questions{overflow:hidden;zoom:1;} #saved-searches li,.saved-search-proxy div,#saved-search-wrapper #new-search{padding:10px;border:1px solid #ccc;border-top:0;} #saved-searches h2,.saved-search-proxy h2,#saved-search-wrapper #new-search h2{color:#000;margin:0;font-size:116%;overflow:hidden;} #saved-search-wrapper li p,#saved-search-wrapper #new-search p{font-size:93%;} #saved-search-wrapper #new-search p{margin-bottom:0;} #saved-search-wrapper #new-search p.cta{margin-top:10px;} #saved-search-wrapper #new-search em{font-weight:bold;} #saved-search-wrapper #new-search,#saved-searches li{background:#F3F9EB;} #saved-searches li.current{background:#fff;border-right-style:dotted;} #saved-searches li li,.saved-search-proxy li,.saved-search-proxy form div{padding:0;border:0;background:none;display:inline;} .search-saved #search-results{border:1px solid #ccc;overflow:hidden;zoom:1;_float:left;padding:0 1em;border-top:0;} #yan-ka{width:630px;} #yan-ka .hd{overflow:hidden;zoom:1;background:#83C845 url(http://l.yimg.com/h/28130/images/all/grad_g-g-ws.gif) repeat-x top left;padding:5px 5px 5px 20px;border:1px solid #2E8200;border-bottom:1px solid #368A00;min-height:26px;_height:26px;} #yan-ka .hd .title{float:left;color:#fff;font-size:123.1%;font-weight:bold;margin-top:2px;} #yan-ka .hd form,#yan-ka .hd fieldset{float:right;} #yan-ka .hd legend span{position:absolute;left:-9999em;} #yan-ka .hd .options{float:left;font-size:85%;border:1px solid #166C00;background:#1B940A;} #yan-ka .hd .options select{background:#DEF1CE;padding:1px;} #yan-ka .hd .options select .disabled{color:#666;} #yan-ka .hd .options label{padding:4px 10px;cursor:pointer;color:#FFF;font-weight:bold;text-align:left;} #yan-ka .hd .cta{float:left;margin:0 0 0 5px;display:inline;} #yan-ka .hd .cta span span span span{font-size:85%;padding-right:10px;padding-left:0;} #yan-ka .hd .rating,#yan-ka .hd .rating-success,#yan-ka .hd .rating-failed{background:#DEF1CE 5px 50% no-repeat;border:1px solid #166C00;margin:0;float:right;padding:3px 8px;font-size:85%;} #yan-ka .hd .rating-success{background-image:url(http://l.yimg.com/h/28130/images/all/tick16x16.png);padding-left:28px;} #yan-ka .hd .rating-failed{background-image:url(http://l.yimg.com/h/28130/images/all/16x16_caution.png);padding-left:28px;} #yan-ka .hd .rating em,#yan-ka .hd .rating-success em{font-weight:bold;} #yan-ka .hd .loading{background:url(http://l.yimg.com/h/28130/images/all/spinner-g-w.gif) no-repeat 100% 50%;height:20px;padding-right:20px;text-indent:-9999px;text-align:left;} #yan-ka .bd{background:url(http://l.yimg.com/h/28130/images/all/question-bg-top.gif) repeat-x top left;border-left:1px solid #ccc;border-right:1px solid #ccc;padding:20px;} #yan-ka .noft{border-bottom:1px solid #ccc;} #yan-ka .ft{border-left:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc;background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x top left;padding:20px;} #yan-ka .ft h2{font-size:93%;font-weight:bold;margin-bottom:.5em;} #yan-ka .ft h2,#yan-ka .ft h3{color:#333;} #original-question{overflow:hidden;zoom:1;margin-bottom:1em;} #original-question p{margin-left:35px;font-size:85%;color:#333;font-weight:bold;} #original-question p .question{display:block;font-weight:normal;} #original-question img{margin:3px 0 5px -35px;float:left;} #yan-ka-search-articles,#yan-ka-category-articles{background:#83C845 url(http://l.yimg.com/h/28130/images/all/grad_g-g-ws.gif) repeat-x top left;padding:0 4px 4px;margin-bottom:10px;} #yan-ka-search-articles .hd,#yan-ka-category-articles .hd{color:#FFF;font-size:123.1%;font-weight:bold;padding:10px 7px;margin:0;} #yan-ka-search-articles .bd,#yan-ka-category-articles .bd{background-color:#FFF;} #yan-ka-search-articles .bd .questions,#yan-ka-category-articles .bd .questions{margin-bottom:0;} #yan-ka-search-articles .bd .questions .meta a,#yan-ka-category-articles .bd .questions .meta a{color:#069;text-decoration:none;} #yan-ka-search-articles .bd .questions .meta a:hover,#yan-ka-category-articles .bd .questions .meta a:hover{text-decoration:underline;} #yan-ka-search-articles .ft,#yan-ka-category-articles .ft{position:relative;background:#FEFEFD url(http://l.yimg.com/h/28130/images/all/grad_g-w.gif) repeat-x top left;padding:11px 10px 9px;} #yan-ka-search-articles .ft p,#yan-ka-category-articles .ft p{margin:0;} #yan-ka-search-articles .bd .questions h3,#yan-ka-search-articles .bd .questions ul,#yan-ka-search-articles .bd .questions p{margin-left:40px;} #yan-ka-search-articles .bd .questions li.first h3,#yan-ka-search-articles .bd .questions li.second h3{font-size:100%;font-weight:normal;} #yan-ka-search-articles .bd .questions .article{margin:.5em 0;} #yan-ka-search-articles .bd .questions .article p{padding-top:5px;} #yan-ka-search-articles .bd .questions .article p em{font-weight:bold;} #yka-related-kh .bd ul li{position:relative;margin:0 0 .25em 35px;min-height:30px;_height:30px;} #yka-related-kh .bd ul li a{text-decoration:none;} #yka-related-kh .bd ul li a:hover{text-decoration:underline;} #yka-related-kh .bd ul li img{position:absolute;left:-35px;} #yka-contributors-kh ul li{overflow:hidden;zoom:1;margin-bottom:.5em;} #yka-contributors-kh ul li.first{overflow:hidden;zoom:1;padding-bottom:.5em;} #yka-contributors-kh ul li.second{padding-top:1em;background:url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x;} #yka-contributors-kh ul li a img{float:left;margin:0 11px 5px 0;} #yka-contributors-kh ul li p{overflow:hidden;zoom:1;margin:0;} #yka-contributors-kh ul li p a{text-decoration:none;} #yka-contributors-kh ul li p a:hover{text-decoration:underline;} #yka-contributors-kh ul li p span{display:block;color:#999;} #yan-ka .bd{overflow:hidden;zoom:1;} #yan-ka .bd .left{float:left;margin:10px 10px 10px 0;} #yan-ka .bd .right{float:right;margin:10px 0 10px 10px;} #yan-ka .bd .left .left,#yan-ka .bd .right .right{margin:0;float:none;} #yan-ka .bd .yui-media{display:block;margin:10px 0;} #yan-ka .bd h1{color:#000;margin:0 0 0.5em 0;} #yan-ka .bd h2,#yan-ka .bd h3{font-family:arial,sans-serif;font-size:140%;font-size-adjust:none;font-stretch:normal;font-style:normal;font-variant:normal;font-weight:bold;line-height:1.2;margin-bottom:0.7em;margin-top:0.7em;color:#000;} #yan-ka .bd h3{font-size:120%;} #yan-ka .bd ol{list-style-image:none;list-style-position:inside;list-style-type:decimal;margin:0 0 1.5em 15px;} #yan-ka .bd ul{list-style-image:none;list-style-position:inside;list-style-type:disc;margin:0 0 1.5em 15px;} #yan-ka .bd em{font-style:italic;} #yan-ka .bd blockquote{background:transparent url(http://l.yimg.com/h/28130/images/all/quotes.png) no-repeat scroll left top;font-style:italic;margin:20px;padding-left:20px;} #yan-ka .bd li{margin-bottom:5px;margin-left:5px;margin-top:5px;} #yan-ka .bd ul li{list-style-image:none;list-style-position:inside;list-style-type:disc;} #yan-ka .bd ol li{list-style-image:none;list-style-position:inside;list-style-type:decimal;} #yan-ka .bd strong{font-weight:bold;} #yan-ka .bd .flickr-img{display:block;display:inline-block;font-weight:normal;background:#fff none repeat scroll 0 0;border:1px solid #ccc;overflow:hidden;padding:2px;} #yan-ka .bd .flickr-img span{display:block;font-size:80%;} #yan-ka .bd .flickr-img *{float:left;} #yan-kh-ratings .ft{margin:12px -12px -12px;padding:12px;background:#E2F1D0;border-top:1px solid #ccc;overflow:hidden;zoom:1;} #yan-kh-ratings table{width:100%;} .js #yan-kh-ratings table.hidden{position:absolute;left:-9999px;} #yan-kh-ratings th{font-weight:bold;} p.cta.ctaarticles span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-darkgreen.png);color:#fff;} p.cta.ctaarticlessecondary span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-yellow.png);color:#333;} #yan-article-exists{background:url(http://l.yimg.com/h/28130/images/all/grad_g-g-ws.gif) repeat-x;color:#fff;font-weight:bold;padding:10px;overflow:hidden;zoom:1;margin-bottom:1em;border:1px solid #166C00;} #yan-article-exists p{font-size:116%;float:left;margin:0;line-height:170%;} #yan-article-exists .cta{float:right;margin:0;font-size:100%;} .yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;} .yui-panel{position:relative;} .yui-panel-container form{margin:0;} .mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0;} .mask.block-scrollbars{overflow:auto;} .masked select,.drag select,.hide-select select{_visibility:hidden;} .yui-panel-container select{_visibility:inherit;} .hide-scrollbars,.hide-scrollbars *{overflow:hidden;} .hide-scrollbars select{display:none;} .show-scrollbars{overflow:auto;} .yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible;} .yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto;} .yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;} .yui-effect-fade .underlay,.yui-effect-fade .yui-tt-shadow{display:none;} .yui-tt-shadow{position:absolute;} .yui-override-padding{padding:0!important;} .yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-decoration:none;} .yui-overlay.yui-force-redraw,.yui-panel-container.yui-force-redraw{margin-bottom:1px;} .mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);} .yui-panel-container{padding:0 1px;*padding:2px;} #legacy-widget-panel{font-size:108%;overflow:visible;position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal;} #legacy-widget-panel .hd{text-transform:capitalize;} #legacy-widget-panel .hd,#legacy-widget-panel .bd,#legacy-widget-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0;} #legacy-widget-panel .hd{border-bottom:solid 1px #ccc;} #legacy-widget-panel .bd,#legacy-widget-panel .ft{background-color:#F2F2F2;} #legacy-widget-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#FFF;background:#427BD6;} #legacy-widget-panel .bd{background-color:#F2F2F2;background-image:none;padding:10px;} #legacy-widget-panel .bd div{padding:0;} #legacy-widget-panel .bd form{float:none;} #legacy-widget-panel .bd .buttons{font-size:85%;margin-top:10px;padding:0;} #legacy-widget-panel .bd .buttons ul{overflow:hidden;zoom:1;} #legacy-widget-panel .bd .buttons ul li{float:left;margin-right:10px;} #legacy-widget-panel .bd .buttons ul .cta span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-orange.png);color:#333;} #legacy-widget-panel .bd .buttons ul .cta #cancel-button{margin:5px 0;background:none;color:#568FDE;} #legacy-widget-panel .bd .buttons ul .cta #cancel-button span{background:none;color:#568FDE;} #legacy-widget-panel .ft{border-top:solid 1px #808080;padding:5px 10px;font-size:77%;} #legacy-widget-panel .container-close{position:absolute;top:5px;right:6px;width:25px;height:15px;background:url(http://l.yimg.com/h/28130/images/all/legacy_sprite.png) no-repeat 8px 0;cursor:pointer;} .yui-panel-container .underlay{right:-1px;left:-1px;} .yui-panel-container.matte{padding:9px 10px;background-color:#fff;} .yui-panel-container.shadow{_padding:2px 4px 0 2px;} .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;filter:alpha(opacity=12);} #legacy-widget-panel .ft{border-top:none;padding:0 10px 10px 10px;font-size:100%;} #legacy-widget-panel .ft .button-group{display:block;text-align:right;} #legacy-widget-panel .ft button.default{font-weight:bold;} #legacy-widget-panel .ft span.default{border-color:#304369;background-position:0 -1400px;} #legacy-widget-panel .ft span.default .first-child{border-color:#304369;} #legacy-widget-panel .ft span.default button{color:#fff;} #legacy-widget-panel .ft span.yui-button-disabled{background-position:0 -1500px;border-color:#ccc;} #legacy-widget-panel .ft span.yui-button-disabled .first-child{border-color:#ccc;} #legacy-widget-panel .ft span.yui-button-disabled button{color:#a6a6a6;} .yui-tt .bd{position:relative;top:0;left:0;z-index:1;color:#000;padding:2px 5px;border-color:#D4C237 #A6982B #A6982B #A6982B;border-width:1px;border-style:solid;background-color:#FFEE69;} .yui-tt.show-scrollbars .bd{overflow:auto;} .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000;} .yui-tt-shadow-visible{opacity:.12;filter:alpha(opacity=12);} .user-qa #yan-content,.user-network #yan-content,.user-networkactivity #yan-content{border-top:1px solid #ccc;} .user-edit-flow fieldset{margin:0 0 15px;} .user-edit-flow p{margin-bottom:0;} .user-edit-flow a{font-weight:bold;} .user-edit-flow h3{font-weight:bold;margin-bottom:17px;} .user-edit-flow input.checkbox{margin-right:10px;} .user-edit-flow .sub-text{margin-bottom:1em;} .user-edit-flow .info-text{font-size:85%;color:#666;padding:1em 0 0;margin-bottom:1em;} .user-edit-flow .info-form-text{margin-top:5px;} .user-edit-flow .info-text span{display:block;} .user-edit-flow .header-label{font-weight:bold;margin-bottom:10px;display:block;} .user-edit-flow .header-label span{font-weight:normal;} .user-edit-flow #share-settings div{margin-bottom:7px;} #profile-settings a,#email-settings a{font-size:93%;font-weight:bold;} h2.current-settings{position:absolute;left:-9999em;} #profile-settings{margin:0 0 1.5em;} #profile-settings h3,#email-settings h3{margin:0 0 7px;font-weight:bold;} #profile-settings p,#email-settings p{margin:13px 0 0;} #profile-settings img{float:left;margin:0 15px 0 0;} #profile-settings ul{margin:0 0 0.2em;} #profile-settings ul li{display:inline;color:#666;} #email-settings .info-text,#profile-settings .info-text{clear:left;zoom:1;margin:0 0 1em;padding:1em 0 0;color:#666;font-size:85%;} #email-settings .info-text span,#profile-settings .info-text span{display:block;} #email-settings a{margin-left:20px;} #email-settings div{overflow:hidden;width:100%;} .user-registration #yan-qt{top:65px;} .user-registrationcomplete #yan-content ul{margin-bottom:1em;margin-left:1.25em;} .user-registrationcomplete #yan-content ul li{list-style-type:disc;margin-bottom:.3em;} .user-registration #notification-settings{background:transparent url(http://l.yimg.com/h/28130/images/all/border-x-grey.gif) repeat-x bottom left;margin:0 0 7px;padding:0 0 18px;} .user-editabout #yan-qt,.user-editsettings #yan-qt{top:90px;} .user-editabout .tabbed-content,.user-editsettings .tabbed-content,.user-editlegacyname .tabbed-content{margin-bottom:0;} .user-editabout .user-edit-flow,.user-editsettings .user-edit-flow,.user-editlegacyname .user-edit-flow{border-top:none;} .user-edit-flow #yan-about-you{margin-bottom:0.5em;display:block;padding:3px;width:428px;} .user-edit-flow #about-settings{margin:0 0 7px;padding:0 0 24px;} .user-edit-flow #legacy-name-picker label span{font-weight:bold;} .user-editsettings legend{font-weight:bold;padding-bottom:8px;color:#333;*margin-left:-4px;} .user-edit-flow ul li{margin-bottom:7px;} .user-editsettings #cr-options{margin-left:28px;} #legacy-name-settings{clear:both;margin:0;} #legacy-name-settings .radio{margin:0 5px 0 0;} #legacy-name-settings ul li{color:#333;} #legacy-name-settings .info-text{margin:4px 0 10px 23px;padding:0;} #yan-answers-profile-name{margin:8px 0 0 23px;display:block;} .user-edit-flow .legacy-name-label{position:absolute;left:-9999em;} #legacy-widget-panel #legacy-widget{width:auto;} #legacy-widget-panel .user-edit-flow{width:auto;border:none;background:transparent;padding:0;} #yan-confirm-cta-mini{margin-bottom:10px;} #yan-confirm-cta-mini .warning{padding:0 10px 7px 10px;border:1px solid #DF0001;color:#DD0200;background:#FCF2F1;} #legacy-widget-panel #yan-confirm-cta-mini .warning ul{margin:5px 10px 0;} #yan-confirm-cta-mini .warning ul{margin-top:5px;} #yan-confirm-cta-mini .warning ul li{padding-top:6px;padding-left:24px;background:transparent url(http://l.yimg.com/h/28130/images/all/legacy_sprite.png) no-repeat 0 -94px;color:#DF0001;} #yan-confirm-cta-mini .warning ul li.first{padding-top:4px;border:none;} #yan-confirm-cta-mini .warning ul li{border-top:1px dotted #ccc;} #legacy-name-settings ul li{color:#333;} #profile-settings ul li .loading{background:url(http://l.yimg.com/h/28130/images/all/spinner.gif) no-repeat top right;padding:5px 30px 5px 0;margin:-5px 0;} .user-index #yan-info-cta{margin-top:0;} #yan-questions-answers #yan-info-cta{margin-top:10px;} .yan-profile-data-wrapper{overflow:hidden;zoom:1;color:#333;} .js .yan-profile-data-wrapper #member-questions-data,.js .yan-profile-data-wrapper #member-answers-data,.js .yan-profile-data-wrapper .yan-profile-data p{position:absolute;text-indent:-99999px;} .js .yan-profile-data-wrapper .yan-profile-chart p{position:relative;text-indent:0;} .js .yan-profile-data-wrapper .no-data{opacity:0.5;filter:alpha(opacity = 50);} .js .yan-profile-data-wrapper .no-data-notice{position:absolute;text-align:center;margin:70px 0 0 15px;width:260px;background-color:#fff;padding:4px 0;z-index:1;} .yan-profile-chart{float:left;width:141px;} .member-answers-chart{margin-right:5px;} .yan-profile-data table{border-collapse:collapse;text-align:center;width:100%;margin-bottom:1em;} .yan-profile-data table th{font-weight:bold;text-align:center;} .yan-profile-data table th,.yan-profile-data table tbody td{border-bottom:1px dotted #98CC61;padding:3px 5px;} .yan-profile-data table.hidden{left:-9999em;position:absolute;} .yan-profile-data p{background:#C8E4A9;border:1px solid #ccc;border-width:1px 0;text-align:center;font-size:108%;padding:5px 4px;margin-bottom:0;font-weight:bold;} .yan-profile-chart p{border:1px solid #ccc;border-bottom:none;background:#C8E4A9;margin-bottom:0;font-weight:bold;} #yan-connections,#yan-questions-answers{margin-bottom:2em;} #yan-questions-answers .questions{margin-bottom:0;} .yan-user-contacts li ul.yan-user-contacts-wrapper:after{content:".";display:block;height:0;clear:both;visibility:hidden;} .yan-user-contacts li ul.yan-user-contacts-wrapper{display:inline-block;_height:1%;margin-bottom:1em;} .yan-user-contacts li ul li.member-details{display:inline;} .wide .yan-user-contacts .profile{margin-right:37px;} .wide .yan-user-contacts .last .profile{margin-right:0;} .user-networkactivity #yan-content{width:711px;float:left;margin-right:10px;} .user-networkactivity #yan-related{width:225px;float:left;margin-top:6.2em;} .user-networkactivity #yan-breadcrumbs{border:none;} .user-networkactivity .yan-content-heading{margin-top:0;} #yan-content-na-wrapper{overflow:hidden;zoom:1;} #my-contacts-list{float:left;background-color:#F0F8E6;border-top:1px solid #ccc;font-size:93%;margin:0 0 1em;width:220px;border-top:1px solid #ccc;padding:0 0 10px;} #my-contacts-list h2{color:#333;font-size:123.1%;font-weight:bold;padding:6px 13px;} #my-contacts-list p{padding:3px 10px 8px;border-bottom:1px dotted #ccc;} #my-contacts-list ol{overflow-y:auto;position:relative;max-height:46em;_height:46em;} #my-contacts-list ol li{padding:6px 10px;line-height:16px;} #my-contacts-list ol .active,#my-contacts-list h2.active{background-color:#D9F0CD;padding:5px 10px;border:1px solid #ccc;border-width:1px 0;} #my-contacts-list h2.active{border-width:0 0 1px 0;padding:6px 13px 5px 13px;} #my-contacts-list li span img,#my-contacts-list li a img{vertical-align:middle;} #my-contacts-list ol .active span,#my-contacts-list ol .active a{color:#333;} #my-contacts-list ol li span img,#my-contacts-list ol li a img{float:left;margin-right:5px;} #my-contacts-list .buttons{margin-left:10px;} #my-contacts-activity{float:left;width:481px;margin-left:10px;} #my-contacts-activity .questions .contacts-action h4 span,#my-contacts-activity .questions .best-answer h4 span{color:#666;font-size:93%;font-weight:normal;} #member-card{border:1px solid #ccc;color:#666;margin-bottom:20px;} #member-container{background:#fff url(http://l.yimg.com/h/23739/images/all/question-bg-top.gif) repeat-x;overflow:auto;zoom:1;} #member-card h1{padding:0;margin:0;font-size:153.9%;color:#333;} #member-card h2{font-size:100%;clear:both;padding-top:5px;} #member-card p{margin:3px 0;} #member-card img.member-banner{display:block;} #member-card ul.network li{float:left;margin-right:10px;} #member-card ul.network li a{display:inline;} #member-card .member-since{clear:both;font-size:93%;margin:0 0 2px 0;} #member-card #member-summary .network{font-size:93%;} #member-card #member-summary{display:inline;margin:18px 0 5px 0;width:271px;float:left;} #member-card .picture{border:2px solid #EAEAEA;display:block;} #member-card table.member-level-info tr,#member-card .member-current-level{margin:1px 0 0 0;padding:0;background-color:#E8F8DD;color:#1D9609;font-size:100%;} #member-card table.member-level-info td,#member-card table.member-level-info th,#member-card .member-current-level{border-bottom:1px solid #fff;} #member-card .member-current-level{font-weight:bold;margin-left:15px;width:100%;background-color:#D3F1C0;} #member-card .member-current-level span{padding:3px;display:block;} #member-card table.member-level-info{width:100%;margin:0 0 10px 15px;border-collapse:collapse;} #member-card table.member-level-info tr .count{font-weight:bold;text-align:right;width:1%;padding-right:10px;white-space:nowrap;} #member-card table.member-level-info td{padding:3px 3px 3px 4px;vertical-align:top;} #member-card #member-summary ul.member-level-info span{font-weight:normal;} #member-card #member-summary ul.member-level-info li{padding:3px 4px;color:#1D9609;float:left;display:inline;margin-bottom:1px;width:53%;} #member-card #member-summary ul.member-level-info li.member-level-alt{width:40%;} #member-card .member-level,#member-card #member-percent span.best-answer-percentage{font-weight:bold;} #member-card{font-size:100%;} #member-card #member-percent{text-align:center;color:#fff;border:2px solid #1D9609;border-bottom-color:#ccc;background-color:#38AC08;background:-moz-linear-gradient(top,#38AC08,#1D9609);background:-webkit-gradient(linear,left top,left bottom,from(#38AC08),to(#1D9609));filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#38AC08',EndColorStr='#1D9609');display:block;font-size:93%;margin-top:2px;line-height:1;padding:7px 0 9px 0;} #member-card #member-percent span.best-answer-percentage{font-size:174%;display:block;margin-bottom:2px;line-height:0.8;} #member-card #member-percent span.best-answer-text{vertical-align:top;} #member-card #member-info{width:100px;display:inline;float:left;margin:18px 20px 0 10px;} #member-card #member-share-settings{float:left;width:177px;border-left:1px solid #ccc;margin-left:-1px;margin-top:18px;font-size:93%;} #member-card .member-contact-details{font-size:93%;margin-top:15px;} #member-card .member-contact-details li{padding-bottom:10px;} #member-card #member-share-settings ul{margin:5px 0 15px 0;} #member-card #member-wrapper{overflow:auto;width:420px;border-right:1px solid #ccc;float:left;padding-bottom:10px;} #member-card #member-about-text{padding:10px 17px;clear:both;border-top:1px solid #ccc;position:relative;background:url(http://l.yimg.com/h/28130/images/all/carousel-bg-top.gif) repeat-x top left;zoom:1;} .js #member-card .toggle h2{color:#069;cursor:pointer;} .js #member-card .toggle h2:hover{text-decoration:underline;} #member-card #member-about-text .toggleContentHide{display:none;} #member-card #member-about-text .toggleContentShow{display:block;padding-bottom:7px;} #member-card #member-about-text #about-me-toggle{position:absolute;top:15px;right:10px;padding-left:15px;text-indent:-9999em;display:block;overflow:hidden;} #member-card #member-about-text .toggleHide{background:url(http://l.yimg.com/h/28130/images/all/accordion-expand-button.gif) left center no-repeat;} #member-card #member-about-text .toggleShow{background:url(http://l.yimg.com/h/28130/images/all/accordion-collapse-button.gif) left center no-repeat;} #member-card #member-share-settings li{margin-left:15px;} #member-card .user-badge{clear:left;padding:10px 0 0 15px;} #member-card .member-email-user a,#member-card .member-email-address{background:url(http://l.yimg.com/h/28130/images/all/userid.png) no-repeat 0 -46px;padding-left:23px;display:block;} #member-card span.member-email-address{color:#333;} #member-card .view-profile{background:url(http://l.yimg.com/h/28130/images/all/userid.png) no-repeat 0 0;padding:0 0 3px 23px;display:block;} #member-card .website{background:url(http://l.yimg.com/h/28130/images/all/userid.png) no-repeat 0 -90px;padding:0 0 3px 23px;display:block;} #member-card .member-im{color:#333;} #member-card .member-im img{float:left;margin:0 11px 0 0;} #member-card .member-email-user span.status-email,#member-card .member-im span,#member-card .view-profile span{display:block;margin-left:23px;color:#666;} #member-card .email-user span{margin-left:15px;} #member-card #member-catexp{font-size:93%;} #member-card #member-catexp li{padding:2px 0;border-top:1px dotted #ccc;} #member-card #member-catexp li.first{border:0;} #member-card.branded-member{border-top-width:10px;} #member-card .member-setting-links{font-size:93%;} #member-card .member-setting-links li.first{float:left;padding-right:5px;border-right:1px solid #ccc;margin-right:5px;} #member-card .network{display:block;margin-bottom:10px;overflow:auto;zoom:1;} #member-summary .member-network{overflow:auto;} .stars-received{display:block;padding:5px 0;text-align:center;border-bottom:1px dotted #98CC61;clear:both;} .stars-received .star{display:inline-block;display:-moz-inline-box;width:14px;text-indent:-9999px;background:url(http://l.yimg.com/h/28130/images/all/star.gif) no-repeat 100% -199px;overflow:hidden;zoom:1;} #yan-activity{clear:both;} #activity-detail{list-style-type:disc;margin:10px 10px 15px 40px;} #activity-detail li{list-style-type:disc;line-height:1.5;padding-left:5px;} #activity-detail li .detail-type{font-weight:bold;} #activity-detail li .detail-question{font-size:93%;} #mini-c{padding:5px 0;} #mini-c .item{border-top:1px dotted #ccc;margin-left:5px;} #mini-c .first{border-top:0;} #mini-c img{border:0;vertical-align:middle;} #mini-c .item{overflow:auto;display:block;padding-top:5px;margin-top:5px;clear:left;} #mini-c .item img{float:left;margin-right:10px;} #mini-c .item .metadata,#mini-c .item .metadata a{color:#666;font-weight:bold;} #mini-c .item .nickname{text-decoration:underline;} #mini-c .item .subject{font-size:108%;} #mini-c .item .notice{font-size:100%;font-weight:bold;} #mini-c .invite{float:right;} #mini-c .more{float:right;font-weight:bold;} #mini-c-ctrl{position:relative;float:right;right:5px;top:5px;} #mini-c-ctrl a{padding-right:20px;background:url("http://l.yimg.com/a/i/us/sch/gr2/button_show.gif") right no-repeat;} .answer-util .loading{background-image:url(http://l.yimg.com/i/i/es/se/savin.gif);} #quiz{font-family:arial;font:13px/1.231 arial,helvetica,clean,sans-serif;background:#fff url(http://l.yimg.com/h/28130/images/all/mainback.png) repeat-x;text-align:center;width:630px;border:1px solid #ccc;border-top:3px solid #44B608;zoom:1;color:#000;_height:447px;min-height:447px;} #quiz #quiz-content{margin:40px;} #quiz .quiz-intro,#quiz .quiz-complete{margin-top:20px;background:url(http://l.yimg.com/h/28130/images/all/toplogo.gif) no-repeat top center;padding-top:114px;} #quiz .quiz-complete{background:url(http://l.yimg.com/h/28130/images/all/completed.gif) no-repeat top center;padding-top:154px;} #quiz .quiz-intro p,#quiz .quiz-complete p{width:450px;display:inline-block;zoom:1;} #quiz .read-more a{color:#0081A8;text-decoration:none;} #quiz h2 .violation-title,#quiz h2 .long-title,#quiz h2 .main-title{color:#000;padding:3px;background-color:#fff;border:1px solid #B0C79D;margin-bottom:10px;text-align:left;display:block;} #quiz h2 .violation-title span,#quiz h2 .long-title span,#quiz h2 .main-title span{font-weight:bold;border-bottom:1px solid #84D03A;border-top:1px solid #F3FA3B;line-height:1.6;background:#B3DE68 url(bigback.jpg) repeat-x center left;background:#B3DE68 url(http://l.yimg.com/h/28130/images/all/bigback.gif) repeat-x center left;display:block;padding:0 20px;} #quiz h2 .main-title{font-size:200%;} #quiz h2 .main-title,#quiz h2 .long-title{display:inline-block;zoom:1;} .quiz_question .question{background:url(http://l.yimg.com/h/28130/images/all/leftspeech.gif) no-repeat 0 10px;padding-top:17px;} .quiz_question .question,.quiz_question .answer{padding-left:35px;margin-left:-15px;display:block;} .quiz_question .qanda{color:#999;display:block;margin-bottom:5px;} .quiz_question{clear:both;font-size:120%;font-family:georgia;background-color:#fff;border:1px solid #C5CBCD;line-height:1.3;text-align:left;margin-bottom:20px;padding-bottom:17px;padding-right:15px;} #quiz .button-big{font-size:131%;line-height:1.4;} #quiz .button-big span span span span{padding:10px 20px 5px 10px;} #quiz .question-choices #answer-form{display:block;background:url(http://l.yimg.com/h/28130/images/all/rightspeech.gif) no-repeat right 10px;padding:20px 15px 20px 0;margin-right:-15px;} #quiz .question-choices{border:1px solid #C5CBCD;background-color:#fff;display:block;margin:0 80px 20px 0;} #quiz .question-choices li.cta,#quiz .question-choices p.cta{display:inline;margin-left:20px;} #quiz .question-choices .button-big span span span span{width:70px;display:inline-block;text-align:center;zoom:1;} #quiz .question-choices ul.correct p.cta button.selected span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-darkgreen.png);color:#fff;} #quiz .question-choices ul.incorrect p.cta button.selected span{background-image:url(http://l.yimg.com/h/28130/images/all/cta-red.gif);color:#fff;} #quiz .question-avatar{float:right;border:1px solid #C5CBCD;background-color:#fff;} #quiz .question-avatar img{margin:3px;display:block;} #response{display:block;border-top:1px solid #C5CBCD;clear:both;text-align:left;overflow:auto;zoom:1;} #quiz div.incorrect{border-color:#E37F7F;background:#FFFEFE url(http://l.yimg.com/h/28130/images/all/incorrectback.png) repeat-x;} #quiz div.correct{border-color:#91D85E;background:#FDFEFC url(http://l.yimg.com/h/28130/images/all/correctback.png) repeat-x;} #quiz div.correct h3{background:url(http://l.yimg.com/h/28130/images/all/correct.gif) no-repeat center left;margin-left:40px;padding-left:40px;} #quiz div.incorrect h3{background:url(http://l.yimg.com/h/28130/images/all/incorrect.gif) no-repeat center left;margin-left:40px;padding-left:40px;} #response h3{line-height:1.7;font-weight:bold;font-size:155%;margin:13px 0 10px 0;} #response p.response-reason,#response p.read-more{margin-left:80px;width:400px;} #response p.read-more{font-weight:bold;margin-bottom:10px;display:block;} #response .next-question{display:inline;float:right;margin-right:20px;} #quiz .quiz-fail{background:url(http://l.yimg.com/h/28130/images/all/ncompleted.gif) no-repeat top left;padding-left:150px;padding-bottom:20px;} #quiz .quiz-win{background:url(http://l.yimg.com/h/28130/images/all/completed.gif) no-repeat top left;padding-left:150px;padding-bottom:20px;} #quiz .quiz-fail p,#quiz .quiz-win p{width:350px;display:inline-block;zoom:1;} #quiz .quiz-fail button{display:inline;} #quiz .quiz-fail form ul li.cta,#quiz .quiz-win form ul li.cta{display:inline;margin-left:10px;vertical-align:top;} #yan-related #yan-guidelines h3{color:#333;font-size:100%;margin-bottom:3px;} #yan-related #yan-guidelines ol{margin-left:22px;} #yan-related #yan-guidelines ol li{list-style-type:decimal;padding:0;} #yan-related #yan-guidelines p.read-guidelines{padding-top:15px;font-weight:bold;margin-bottom:5px;} ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline; filename=print.css Content-Type: text/css; charset=utf-8; name=print.css Content-Location: http://l.yimg.com/h/28130/css/print.css Content-Transfer-Encoding: 8bit html, body, #yan-question { background:none; } a img, abbr {border:0;} iframe {display:none;} #yan { border:0; background:none; font:13px arial, sans-serif; } /* print styles */ #ygma-search, #ymenu, #ygmashpd, #ygmaheader .srch, #ygmatop, #yum, #yum-user, #yum-branding ul, #yan-nav, #yan-banner, #yan-header-searchbox, #yan-related, #yan-question-tools, .cta, #yan-main .utils-container, .pagination, .flag-abuse, .report-abuse, #yan-answer-sort, .collapsed, .other-questions, #ft, #show-another, #yan-comments form, #ysfAPILog, #yan-bestof .actions, .default-index #yan-wrap h1 { display:none; } #yum-branding { border:0; } .profile a { color:#666; } .profile .photo { height:16px; width:16px; } .profile .user .by { display:none; } .answer-util ul { background:none; border:0; } .answer { padding-left:0; } #yan-answers ul { padding:0; } .answer { margin-bottom:0.5em; border-bottom: 1px dotted #eee; padding-bottom:0.5em; page-break-between:avoid; } .profile .contributions, .profile .stats, .profile .network, .utils-container, #yan-main h2 { display:none; } .user-badge, .user-badge img { display:inline; } h1 { font-size:123.1%; margin-bottom:0.3em; } #yan-main .best h2 { display:block; font-size:108%; font-weight:normal; margin-bottom:0.3em; } #yan-main .best h2 span { font-weight:bold; } h3 { font-size: 108%; font-weight: bold; color: #666; margin: 1em 0; } .profile { font-weight:bold; } #yan-breadcrumbs, .meta, .additional-date { margin:0.3em 0; padding:0; font-size:85%; color: #666; } #yan-breadcrumbs li, .meta li { display:inline; } #yan-breadcrumbs { margin-bottom:1em; } .meta a { text-decoration:none; color:#666; } .meta img { display:none; } .utils-container, #yan-main h2 { display: none; } .meta abbr:after, .additonal-date abbr:after { content: ' ( ' attr(title) ' )'; } #yan-comments .signin { display:none; } #yan-comments .none { display:none; } .answer-rating { margin-bottom:0; } .answer-rating dt, .answer-rating dd { display:inline; margin:0; } .answer-rating dt { font-weight:bold; } .answer-rating dt.desc { display:none; } .answer-rating dd.desc { display:block; } #yan-question { padding-bottom:4em } #yan-question, .answer { position:relative; padding-bottom:3em; } .profile { position:absolute; bottom:1em; } .comment { position:relative; } .comment .profile, .comment .content { position:static; display:inline; } #yan-main h2.additional-details { display:block; font-size:100%; font-weight:bold; margin:0; } ------------jikKz0FwQOsi5lfrzIb0mq Content-Disposition: inline; filename=answers-fe-es.js Content-Type: application/x-javascript; charset=utf-8; name=answers-fe-es.js Content-Location: http://l.yimg.com/h/28130/js/answers-fe-es.js Content-Transfer-Encoding: Base64 CmlmKHR5cGVvZiBZQUhPTz09InVuZGVmaW5lZCJ8fCFZQUhPTyl7dmFyIFlBSE9P PXt9O31ZQUhPTy5uYW1lc3BhY2U9ZnVuY3Rpb24oKXt2YXIgQT1hcmd1bWVudHMs RT1udWxsLEMsQixEO2ZvcihDPTA7QzxBLmxlbmd0aDtDPUMrMSl7RD0oIiIrQVtD XSkuc3BsaXQoIi4iKTtFPVlBSE9PO2ZvcihCPShEWzBdPT0iWUFIT08iKT8xOjA7 QjxELmxlbmd0aDtCPUIrMSl7RVtEW0JdXT1FW0RbQl1dfHx7fTtFPUVbRFtCXV07 fX1yZXR1cm4gRTt9O1lBSE9PLmxvZz1mdW5jdGlvbihELEEsQyl7dmFyIEI9WUFI T08ud2lkZ2V0LkxvZ2dlcjtpZihCJiZCLmxvZyl7cmV0dXJuIEIubG9nKEQsQSxD KTt9ZWxzZXtyZXR1cm4gZmFsc2U7fX07WUFIT08ucmVnaXN0ZXI9ZnVuY3Rpb24o QSxFLEQpe3ZhciBJPVlBSE9PLmVudi5tb2R1bGVzLEIsSCxHLEYsQztpZighSVtB XSl7SVtBXT17dmVyc2lvbnM6W10sYnVpbGRzOltdfTt9Qj1JW0FdO0g9RC52ZXJz aW9uO0c9RC5idWlsZDtGPVlBSE9PLmVudi5saXN0ZW5lcnM7Qi5uYW1lPUE7Qi52 ZXJzaW9uPUg7Qi5idWlsZD1HO0IudmVyc2lvbnMucHVzaChIKTtCLmJ1aWxkcy5w dXNoKEcpO0IubWFpbkNsYXNzPUU7Zm9yKEM9MDtDPEYubGVuZ3RoO0M9QysxKXtG W0NdKEIpO31pZihFKXtFLlZFUlNJT049SDtFLkJVSUxEPUc7fWVsc2V7WUFIT08u bG9nKCJtYWluQ2xhc3MgaXMgdW5kZWZpbmVkIGZvciBtb2R1bGUgIitBLCJ3YXJu Iik7fX07WUFIT08uZW52PVlBSE9PLmVudnx8e21vZHVsZXM6W10sbGlzdGVuZXJz OltdfTtZQUhPTy5lbnYuZ2V0VmVyc2lvbj1mdW5jdGlvbihBKXtyZXR1cm4gWUFI T08uZW52Lm1vZHVsZXNbQV18fG51bGw7fTtZQUhPTy5lbnYudWE9ZnVuY3Rpb24o KXt2YXIgQz17aWU6MCxvcGVyYTowLGdlY2tvOjAsd2Via2l0OjAsbW9iaWxlOm51 bGwsYWlyOjAsY2FqYTowfSxCPW5hdmlnYXRvci51c2VyQWdlbnQsQTtpZigoL0tI VE1MLykudGVzdChCKSl7Qy53ZWJraXQ9MTt9QT1CLm1hdGNoKC9BcHBsZVdlYktp dFwvKFteXHNdKikvKTtpZihBJiZBWzFdKXtDLndlYmtpdD1wYXJzZUZsb2F0KEFb MV0pO2lmKC8gTW9iaWxlXC8vLnRlc3QoQikpe0MubW9iaWxlPSJBcHBsZSI7fWVs c2V7QT1CLm1hdGNoKC9Ob2tpYU5bXlwvXSovKTtpZihBKXtDLm1vYmlsZT1BWzBd O319QT1CLm1hdGNoKC9BZG9iZUFJUlwvKFteXHNdKikvKTtpZihBKXtDLmFpcj1B WzBdO319aWYoIUMud2Via2l0KXtBPUIubWF0Y2goL09wZXJhW1xzXC9dKFteXHNd KikvKTtpZihBJiZBWzFdKXtDLm9wZXJhPXBhcnNlRmxvYXQoQVsxXSk7QT1CLm1h dGNoKC9PcGVyYSBNaW5pW147XSovKTtpZihBKXtDLm1vYmlsZT1BWzBdO319ZWxz ZXtBPUIubWF0Y2goL01TSUVccyhbXjtdKikvKTtpZihBJiZBWzFdKXtDLmllPXBh cnNlRmxvYXQoQVsxXSk7fWVsc2V7QT1CLm1hdGNoKC9HZWNrb1wvKFteXHNdKikv KTtpZihBKXtDLmdlY2tvPTE7QT1CLm1hdGNoKC9ydjooW15cc1wpXSopLyk7aWYo QSYmQVsxXSl7Qy5nZWNrbz1wYXJzZUZsb2F0KEFbMV0pO319fX19QT1CLm1hdGNo KC9DYWphXC8oW15cc10qKS8pO2lmKEEmJkFbMV0pe0MuY2FqYT1wYXJzZUZsb2F0 KEFbMV0pO31yZXR1cm4gQzt9KCk7KGZ1bmN0aW9uKCl7WUFIT08ubmFtZXNwYWNl KCJ1dGlsIiwid2lkZ2V0IiwiZXhhbXBsZSIpO2lmKCJ1bmRlZmluZWQiIT09dHlw ZW9mIFlBSE9PX2NvbmZpZyl7dmFyIEI9WUFIT09fY29uZmlnLmxpc3RlbmVyLEE9 WUFIT08uZW52Lmxpc3RlbmVycyxEPXRydWUsQztpZihCKXtmb3IoQz0wO0M8QS5s ZW5ndGg7Qz1DKzEpe2lmKEFbQ109PUIpe0Q9ZmFsc2U7YnJlYWs7fX1pZihEKXtB LnB1c2goQik7fX19fSkoKTtZQUhPTy5sYW5nPVlBSE9PLmxhbmd8fHt9OyhmdW5j dGlvbigpe3ZhciBCPVlBSE9PLmxhbmcsRj0iW29iamVjdCBBcnJheV0iLEM9Iltv YmplY3QgRnVuY3Rpb25dIixBPU9iamVjdC5wcm90b3R5cGUsRT1bInRvU3RyaW5n IiwidmFsdWVPZiJdLEQ9e2lzQXJyYXk6ZnVuY3Rpb24oRyl7cmV0dXJuIEEudG9T dHJpbmcuYXBwbHkoRyk9PT1GO30saXNCb29sZWFuOmZ1bmN0aW9uKEcpe3JldHVy biB0eXBlb2YgRz09PSJib29sZWFuIjt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oRyl7 cmV0dXJuIEEudG9TdHJpbmcuYXBwbHkoRyk9PT1DO30saXNOdWxsOmZ1bmN0aW9u KEcpe3JldHVybiBHPT09bnVsbDt9LGlzTnVtYmVyOmZ1bmN0aW9uKEcpe3JldHVy biB0eXBlb2YgRz09PSJudW1iZXIiJiZpc0Zpbml0ZShHKTt9LGlzT2JqZWN0OmZ1 bmN0aW9uKEcpe3JldHVybihHJiYodHlwZW9mIEc9PT0ib2JqZWN0Inx8Qi5pc0Z1 bmN0aW9uKEcpKSl8fGZhbHNlO30saXNTdHJpbmc6ZnVuY3Rpb24oRyl7cmV0dXJu IHR5cGVvZiBHPT09InN0cmluZyI7fSxpc1VuZGVmaW5lZDpmdW5jdGlvbihHKXty ZXR1cm4gdHlwZW9mIEc9PT0idW5kZWZpbmVkIjt9LF9JRUVudW1GaXg6KFlBSE9P LmVudi51YS5pZSk/ZnVuY3Rpb24oSSxIKXt2YXIgRyxLLEo7Zm9yKEc9MDtHPEUu bGVuZ3RoO0c9RysxKXtLPUVbR107Sj1IW0tdO2lmKEIuaXNGdW5jdGlvbihKKSYm SiE9QVtLXSl7SVtLXT1KO319fTpmdW5jdGlvbigpe30sZXh0ZW5kOmZ1bmN0aW9u KEosSyxJKXtpZighS3x8IUope3Rocm93IG5ldyBFcnJvcigiZXh0ZW5kIGZhaWxl ZCwgcGxlYXNlIGNoZWNrIHRoYXQgIisiYWxsIGRlcGVuZGVuY2llcyBhcmUgaW5j bHVkZWQuIik7fXZhciBIPWZ1bmN0aW9uKCl7fSxHO0gucHJvdG90eXBlPUsucHJv dG90eXBlO0oucHJvdG90eXBlPW5ldyBIKCk7Si5wcm90b3R5cGUuY29uc3RydWN0 b3I9SjtKLnN1cGVyY2xhc3M9Sy5wcm90b3R5cGU7aWYoSy5wcm90b3R5cGUuY29u c3RydWN0b3I9PUEuY29uc3RydWN0b3Ipe0sucHJvdG90eXBlLmNvbnN0cnVjdG9y PUs7fWlmKEkpe2ZvcihHIGluIEkpe2lmKEIuaGFzT3duUHJvcGVydHkoSSxHKSl7 Si5wcm90b3R5cGVbR109SVtHXTt9fUIuX0lFRW51bUZpeChKLnByb3RvdHlwZSxJ KTt9fSxhdWdtZW50T2JqZWN0OmZ1bmN0aW9uKEssSil7aWYoIUp8fCFLKXt0aHJv dyBuZXcgRXJyb3IoIkFic29yYiBmYWlsZWQsIHZlcmlmeSBkZXBlbmRlbmNpZXMu Iik7fXZhciBHPWFyZ3VtZW50cyxJLEwsSD1HWzJdO2lmKEgmJkghPT10cnVlKXtm b3IoST0yO0k8Ry5sZW5ndGg7ST1JKzEpe0tbR1tJXV09SltHW0ldXTt9fWVsc2V7 Zm9yKEwgaW4gSil7aWYoSHx8IShMIGluIEspKXtLW0xdPUpbTF07fX1CLl9JRUVu dW1GaXgoSyxKKTt9fSxhdWdtZW50UHJvdG86ZnVuY3Rpb24oSixJKXtpZighSXx8 IUope3Rocm93IG5ldyBFcnJvcigiQXVnbWVudCBmYWlsZWQsIHZlcmlmeSBkZXBl bmRlbmNpZXMuIik7fXZhciBHPVtKLnByb3RvdHlwZSxJLnByb3RvdHlwZV0sSDtm b3IoSD0yO0g8YXJndW1lbnRzLmxlbmd0aDtIPUgrMSl7Ry5wdXNoKGFyZ3VtZW50 c1tIXSk7fUIuYXVnbWVudE9iamVjdC5hcHBseSh0aGlzLEcpO30sZHVtcDpmdW5j dGlvbihHLEwpe3ZhciBJLEssTj1bXSxPPSJ7Li4ufSIsSD0iZigpey4uLn0iLE09 IiwgIixKPSIgPT4gIjtpZighQi5pc09iamVjdChHKSl7cmV0dXJuIEcrIiI7fWVs c2V7aWYoRyBpbnN0YW5jZW9mIERhdGV8fCgibm9kZVR5cGUiaW4gRyYmInRhZ05h bWUiaW4gRykpe3JldHVybiBHO31lbHNle2lmKEIuaXNGdW5jdGlvbihHKSl7cmV0 dXJuIEg7fX19TD0oQi5pc051bWJlcihMKSk/TDozO2lmKEIuaXNBcnJheShHKSl7 Ti5wdXNoKCJbIik7Zm9yKEk9MCxLPUcubGVuZ3RoO0k8SztJPUkrMSl7aWYoQi5p c09iamVjdChHW0ldKSl7Ti5wdXNoKChMPjApP0IuZHVtcChHW0ldLEwtMSk6Tyk7 fWVsc2V7Ti5wdXNoKEdbSV0pO31OLnB1c2goTSk7fWlmKE4ubGVuZ3RoPjEpe04u cG9wKCk7fU4ucHVzaCgiXSIpO31lbHNle04ucHVzaCgieyIpO2ZvcihJIGluIEcp e2lmKEIuaGFzT3duUHJvcGVydHkoRyxJKSl7Ti5wdXNoKEkrSik7aWYoQi5pc09i amVjdChHW0ldKSl7Ti5wdXNoKChMPjApP0IuZHVtcChHW0ldLEwtMSk6Tyk7fWVs c2V7Ti5wdXNoKEdbSV0pO31OLnB1c2goTSk7fX1pZihOLmxlbmd0aD4xKXtOLnBv cCgpO31OLnB1c2goIn0iKTt9cmV0dXJuIE4uam9pbigiIik7fSxzdWJzdGl0dXRl OmZ1bmN0aW9uKFYsSCxPKXt2YXIgTCxLLEosUixTLFUsUT1bXSxJLE09ImR1bXAi LFA9IiAiLEc9InsiLFQ9In0iLE47Zm9yKDs7KXtMPVYubGFzdEluZGV4T2YoRyk7 aWYoTDwwKXticmVhazt9Sz1WLmluZGV4T2YoVCxMKTtpZihMKzE+PUspe2JyZWFr O31JPVYuc3Vic3RyaW5nKEwrMSxLKTtSPUk7VT1udWxsO0o9Ui5pbmRleE9mKFAp O2lmKEo+LTEpe1U9Ui5zdWJzdHJpbmcoSisxKTtSPVIuc3Vic3RyaW5nKDAsSik7 fVM9SFtSXTtpZihPKXtTPU8oUixTLFUpO31pZihCLmlzT2JqZWN0KFMpKXtpZihC LmlzQXJyYXkoUykpe1M9Qi5kdW1wKFMscGFyc2VJbnQoVSwxMCkpO31lbHNle1U9 VXx8IiI7Tj1VLmluZGV4T2YoTSk7aWYoTj4tMSl7VT1VLnN1YnN0cmluZyg0KTt9 aWYoUy50b1N0cmluZz09PUEudG9TdHJpbmd8fE4+LTEpe1M9Qi5kdW1wKFMscGFy c2VJbnQoVSwxMCkpO31lbHNle1M9Uy50b1N0cmluZygpO319fWVsc2V7aWYoIUIu aXNTdHJpbmcoUykmJiFCLmlzTnVtYmVyKFMpKXtTPSJ+LSIrUS5sZW5ndGgrIi1+ IjtRW1EubGVuZ3RoXT1JO319Vj1WLnN1YnN0cmluZygwLEwpK1MrVi5zdWJzdHJp bmcoSysxKTt9Zm9yKEw9US5sZW5ndGgtMTtMPj0wO0w9TC0xKXtWPVYucmVwbGFj ZShuZXcgUmVnRXhwKCJ+LSIrTCsiLX4iKSwieyIrUVtMXSsifSIsImciKTt9cmV0 dXJuIFY7fSx0cmltOmZ1bmN0aW9uKEcpe3RyeXtyZXR1cm4gRy5yZXBsYWNlKC9e XHMrfFxzKyQvZywiIik7fWNhdGNoKEgpe3JldHVybiBHO319LG1lcmdlOmZ1bmN0 aW9uKCl7dmFyIEo9e30sSD1hcmd1bWVudHMsRz1ILmxlbmd0aCxJO2ZvcihJPTA7 STxHO0k9SSsxKXtCLmF1Z21lbnRPYmplY3QoSixIW0ldLHRydWUpO31yZXR1cm4g Sjt9LGxhdGVyOmZ1bmN0aW9uKE4sSCxPLEosSyl7Tj1OfHwwO0g9SHx8e307dmFy IEk9TyxNPUosTCxHO2lmKEIuaXNTdHJpbmcoTykpe0k9SFtPXTt9aWYoIUkpe3Ro cm93IG5ldyBUeXBlRXJyb3IoIm1ldGhvZCB1bmRlZmluZWQiKTt9aWYoIUIuaXNB cnJheShNKSl7TT1bSl07fUw9ZnVuY3Rpb24oKXtJLmFwcGx5KEgsTSk7fTtHPShL KT9zZXRJbnRlcnZhbChMLE4pOnNldFRpbWVvdXQoTCxOKTtyZXR1cm57aW50ZXJ2 YWw6SyxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmludGVydmFsKXtjbGVhcklu dGVydmFsKEcpO31lbHNle2NsZWFyVGltZW91dChHKTt9fX07fSxpc1ZhbHVlOmZ1 bmN0aW9uKEcpe3JldHVybihCLmlzT2JqZWN0KEcpfHxCLmlzU3RyaW5nKEcpfHxC LmlzTnVtYmVyKEcpfHxCLmlzQm9vbGVhbihHKSk7fX07Qi5oYXNPd25Qcm9wZXJ0 eT0oQS5oYXNPd25Qcm9wZXJ0eSk/ZnVuY3Rpb24oRyxIKXtyZXR1cm4gRyYmRy5o YXNPd25Qcm9wZXJ0eShIKTt9OmZ1bmN0aW9uKEcsSCl7cmV0dXJuIUIuaXNVbmRl ZmluZWQoR1tIXSkmJkcuY29uc3RydWN0b3IucHJvdG90eXBlW0hdIT09R1tIXTt9 O0QuYXVnbWVudE9iamVjdChCLEQsdHJ1ZSk7WUFIT08udXRpbC5MYW5nPUI7Qi5h dWdtZW50PUIuYXVnbWVudFByb3RvO1lBSE9PLmF1Z21lbnQ9Qi5hdWdtZW50UHJv dG87WUFIT08uZXh0ZW5kPUIuZXh0ZW5kO30pKCk7WUFIT08ucmVnaXN0ZXIoInlh aG9vIixZQUhPTyx7dmVyc2lvbjoiMi43LjAiLGJ1aWxkOiIxNzk5In0pOyhmdW5j dGlvbigpe1lBSE9PLmVudi5faWRfY291bnRlcj1ZQUhPTy5lbnYuX2lkX2NvdW50 ZXJ8fDA7dmFyIEU9WUFIT08udXRpbCxMPVlBSE9PLmxhbmcsbT1ZQUhPTy5lbnYu dWEsQT1ZQUhPTy5sYW5nLnRyaW0sZD17fSxoPXt9LE49L150KD86YWJsZXxkfGgp JC9pLFg9L2NvbG9yJC9pLEs9d2luZG93LmRvY3VtZW50LFc9Sy5kb2N1bWVudEVs ZW1lbnQsZT0ib3duZXJEb2N1bWVudCIsbj0iZGVmYXVsdFZpZXciLHY9ImRvY3Vt ZW50RWxlbWVudCIsdD0iY29tcGF0TW9kZSIsYj0ib2Zmc2V0TGVmdCIsUD0ib2Zm c2V0VG9wIix1PSJvZmZzZXRQYXJlbnQiLFo9InBhcmVudE5vZGUiLGw9Im5vZGVU eXBlIixDPSJ0YWdOYW1lIixPPSJzY3JvbGxMZWZ0IixpPSJzY3JvbGxUb3AiLFE9 ImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsdz0iZ2V0Q29tcHV0ZWRTdHlsZSIsYT0i Y3VycmVudFN0eWxlIixNPSJDU1MxQ29tcGF0IixjPSJCYWNrQ29tcGF0IixnPSJj bGFzcyIsRj0iY2xhc3NOYW1lIixKPSIiLEI9IiAiLHM9Iig/Ol58XFxzKSIsaz0i KD89IHwkKSIsVT0iZyIscD0icG9zaXRpb24iLGY9ImZpeGVkIixWPSJyZWxhdGl2 ZSIsaj0ibGVmdCIsbz0idG9wIixyPSJtZWRpdW0iLHE9ImJvcmRlckxlZnRXaWR0 aCIsUj0iYm9yZGVyVG9wV2lkdGgiLEQ9bS5vcGVyYSxJPW0ud2Via2l0LEg9bS5n ZWNrbyxUPW0uaWU7RS5Eb209e0NVU1RPTV9BVFRSSUJVVEVTOighVy5oYXNBdHRy aWJ1dGUpP3siZm9yIjoiaHRtbEZvciIsImNsYXNzIjpGfTp7Imh0bWxGb3IiOiJm b3IiLCJjbGFzc05hbWUiOmd9LGdldDpmdW5jdGlvbih5KXt2YXIgQUEsWSx6LHgs RztpZih5KXtpZih5W2xdfHx5Lml0ZW0pe3JldHVybiB5O31pZih0eXBlb2YgeT09 PSJzdHJpbmciKXtBQT15O3k9Sy5nZXRFbGVtZW50QnlJZCh5KTtpZih5JiZ5Lmlk PT09QUEpe3JldHVybiB5O31lbHNle2lmKHkmJksuYWxsKXt5PW51bGw7WT1LLmFs bFtBQV07Zm9yKHg9MCxHPVkubGVuZ3RoO3g8RzsrK3gpe2lmKFlbeF0uaWQ9PT1B QSl7cmV0dXJuIFlbeF07fX19fXJldHVybiB5O31pZih5LkRPTV9FVkVOVFMpe3k9 eS5nZXQoImVsZW1lbnQiKTt9aWYoImxlbmd0aCJpbiB5KXt6PVtdO2Zvcih4PTAs Rz15Lmxlbmd0aDt4PEc7Kyt4KXt6W3oubGVuZ3RoXT1FLkRvbS5nZXQoeVt4XSk7 fXJldHVybiB6O31yZXR1cm4geTt9cmV0dXJuIG51bGw7fSxnZXRDb21wdXRlZFN0 eWxlOmZ1bmN0aW9uKEcsWSl7aWYod2luZG93W3ddKXtyZXR1cm4gR1tlXVtuXVt3 XShHLG51bGwpW1ldO31lbHNle2lmKEdbYV0pe3JldHVybiBFLkRvbS5JRV9Db21w dXRlZFN0eWxlLmdldChHLFkpO319fSxnZXRTdHlsZTpmdW5jdGlvbihHLFkpe3Jl dHVybiBFLkRvbS5iYXRjaChHLEUuRG9tLl9nZXRTdHlsZSxZKTt9LF9nZXRTdHls ZTpmdW5jdGlvbigpe2lmKHdpbmRvd1t3XSl7cmV0dXJuIGZ1bmN0aW9uKEcseSl7 eT0oeT09PSJmbG9hdCIpP3k9ImNzc0Zsb2F0IjpFLkRvbS5fdG9DYW1lbCh5KTt2 YXIgeD1HLnN0eWxlW3ldLFk7aWYoIXgpe1k9R1tlXVtuXVt3XShHLG51bGwpO2lm KFkpe3g9WVt5XTt9fXJldHVybiB4O307fWVsc2V7aWYoV1thXSl7cmV0dXJuIGZ1 bmN0aW9uKEcseSl7dmFyIHg7c3dpdGNoKHkpe2Nhc2Uib3BhY2l0eSI6eD0xMDA7 dHJ5e3g9Ry5maWx0ZXJzWyJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBo YSJdLm9wYWNpdHk7fWNhdGNoKHope3RyeXt4PUcuZmlsdGVycygiYWxwaGEiKS5v cGFjaXR5O31jYXRjaChZKXt9fXJldHVybiB4LzEwMDtjYXNlImZsb2F0Ijp5PSJz dHlsZUZsb2F0IjtkZWZhdWx0Onk9RS5Eb20uX3RvQ2FtZWwoeSk7eD1HW2FdP0db YV1beV06bnVsbDtyZXR1cm4oRy5zdHlsZVt5XXx8eCk7fX07fX19KCksc2V0U3R5 bGU6ZnVuY3Rpb24oRyxZLHgpe0UuRG9tLmJhdGNoKEcsRS5Eb20uX3NldFN0eWxl LHtwcm9wOlksdmFsOnh9KTt9LF9zZXRTdHlsZTpmdW5jdGlvbigpe2lmKFQpe3Jl dHVybiBmdW5jdGlvbihZLEcpe3ZhciB4PUUuRG9tLl90b0NhbWVsKEcucHJvcCks eT1HLnZhbDtpZihZKXtzd2l0Y2goeCl7Y2FzZSJvcGFjaXR5IjppZihMLmlzU3Ry aW5nKFkuc3R5bGUuZmlsdGVyKSl7WS5zdHlsZS5maWx0ZXI9ImFscGhhKG9wYWNp dHk9Iit5KjEwMCsiKSI7aWYoIVlbYV18fCFZW2FdLmhhc0xheW91dCl7WS5zdHls ZS56b29tPTE7fX1icmVhaztjYXNlImZsb2F0Ijp4PSJzdHlsZUZsb2F0IjtkZWZh dWx0Olkuc3R5bGVbeF09eTt9fWVsc2V7fX07fWVsc2V7cmV0dXJuIGZ1bmN0aW9u KFksRyl7dmFyIHg9RS5Eb20uX3RvQ2FtZWwoRy5wcm9wKSx5PUcudmFsO2lmKFkp e2lmKHg9PSJmbG9hdCIpe3g9ImNzc0Zsb2F0Ijt9WS5zdHlsZVt4XT15O31lbHNl e319O319KCksZ2V0WFk6ZnVuY3Rpb24oRyl7cmV0dXJuIEUuRG9tLmJhdGNoKEcs RS5Eb20uX2dldFhZKTt9LF9jYW5Qb3NpdGlvbjpmdW5jdGlvbihHKXtyZXR1cm4o RS5Eb20uX2dldFN0eWxlKEcsImRpc3BsYXkiKSE9PSJub25lIiYmRS5Eb20uX2lu RG9jKEcpKTt9LF9nZXRYWTpmdW5jdGlvbigpe2lmKEtbdl1bUV0pe3JldHVybiBm dW5jdGlvbih5KXt2YXIgeixZLEFBLEFGLEFFLEFELEFDLEcseCxBQj1NYXRoLmZs b29yLEFHPWZhbHNlO2lmKEUuRG9tLl9jYW5Qb3NpdGlvbih5KSl7QUE9eVtRXSgp O0FGPXlbZV07ej1FLkRvbS5nZXREb2N1bWVudFNjcm9sbExlZnQoQUYpO1k9RS5E b20uZ2V0RG9jdW1lbnRTY3JvbGxUb3AoQUYpO0FHPVtBQihBQVtqXSksQUIoQUFb b10pXTtpZihUJiZtLmllPDgpe0FFPTI7QUQ9MjtBQz1BRlt0XTtHPVMoQUZbdl0s cSk7eD1TKEFGW3ZdLFIpO2lmKG0uaWU9PT02KXtpZihBQyE9PWMpe0FFPTA7QUQ9 MDt9fWlmKChBQz09Yykpe2lmKEchPT1yKXtBRT1wYXJzZUludChHLDEwKTt9aWYo eCE9PXIpe0FEPXBhcnNlSW50KHgsMTApO319QUdbMF0tPUFFO0FHWzFdLT1BRDt9 aWYoKFl8fHopKXtBR1swXSs9ejtBR1sxXSs9WTt9QUdbMF09QUIoQUdbMF0pO0FH WzFdPUFCKEFHWzFdKTt9ZWxzZXt9cmV0dXJuIEFHO307fWVsc2V7cmV0dXJuIGZ1 bmN0aW9uKHkpe3ZhciB4LFksQUEsQUIsQUMsej1mYWxzZSxHPXk7aWYoRS5Eb20u X2NhblBvc2l0aW9uKHkpKXt6PVt5W2JdLHlbUF1dO3g9RS5Eb20uZ2V0RG9jdW1l bnRTY3JvbGxMZWZ0KHlbZV0pO1k9RS5Eb20uZ2V0RG9jdW1lbnRTY3JvbGxUb3Ao eVtlXSk7QUM9KChIfHxtLndlYmtpdD41MTkpP3RydWU6ZmFsc2UpO3doaWxlKChH PUdbdV0pKXt6WzBdKz1HW2JdO3pbMV0rPUdbUF07aWYoQUMpe3o9RS5Eb20uX2Nh bGNCb3JkZXJzKEcseik7fX1pZihFLkRvbS5fZ2V0U3R5bGUoeSxwKSE9PWYpe0c9 eTt3aGlsZSgoRz1HW1pdKSYmR1tDXSl7QUE9R1tpXTtBQj1HW09dO2lmKEgmJihF LkRvbS5fZ2V0U3R5bGUoRywib3ZlcmZsb3ciKSE9PSJ2aXNpYmxlIikpe3o9RS5E b20uX2NhbGNCb3JkZXJzKEcseik7fWlmKEFBfHxBQil7elswXS09QUI7elsxXS09 QUE7fX16WzBdKz14O3pbMV0rPVk7fWVsc2V7aWYoRCl7elswXS09eDt6WzFdLT1Z O31lbHNle2lmKEl8fEgpe3pbMF0rPXg7elsxXSs9WTt9fX16WzBdPU1hdGguZmxv b3IoelswXSk7elsxXT1NYXRoLmZsb29yKHpbMV0pO31lbHNle31yZXR1cm4gejt9 O319KCksZ2V0WDpmdW5jdGlvbihHKXt2YXIgWT1mdW5jdGlvbih4KXtyZXR1cm4g RS5Eb20uZ2V0WFkoeClbMF07fTtyZXR1cm4gRS5Eb20uYmF0Y2goRyxZLEUuRG9t LHRydWUpO30sZ2V0WTpmdW5jdGlvbihHKXt2YXIgWT1mdW5jdGlvbih4KXtyZXR1 cm4gRS5Eb20uZ2V0WFkoeClbMV07fTtyZXR1cm4gRS5Eb20uYmF0Y2goRyxZLEUu RG9tLHRydWUpO30sc2V0WFk6ZnVuY3Rpb24oRyx4LFkpe0UuRG9tLmJhdGNoKEcs RS5Eb20uX3NldFhZLHtwb3M6eCxub1JldHJ5Oll9KTt9LF9zZXRYWTpmdW5jdGlv bihHLHope3ZhciBBQT1FLkRvbS5fZ2V0U3R5bGUoRyxwKSx5PUUuRG9tLnNldFN0 eWxlLEFEPXoucG9zLFk9ei5ub1JldHJ5LEFCPVtwYXJzZUludChFLkRvbS5nZXRD b21wdXRlZFN0eWxlKEcsaiksMTApLHBhcnNlSW50KEUuRG9tLmdldENvbXB1dGVk U3R5bGUoRyxvKSwxMCldLEFDLHg7aWYoQUE9PSJzdGF0aWMiKXtBQT1WO3koRyxw LEFBKTt9QUM9RS5Eb20uX2dldFhZKEcpO2lmKCFBRHx8QUM9PT1mYWxzZSl7cmV0 dXJuIGZhbHNlO31pZihpc05hTihBQlswXSkpe0FCWzBdPShBQT09Vik/MDpHW2Jd O31pZihpc05hTihBQlsxXSkpe0FCWzFdPShBQT09Vik/MDpHW1BdO31pZihBRFsw XSE9PW51bGwpe3koRyxqLEFEWzBdLUFDWzBdK0FCWzBdKyJweCIpO31pZihBRFsx XSE9PW51bGwpe3koRyxvLEFEWzFdLUFDWzFdK0FCWzFdKyJweCIpO31pZighWSl7 eD1FLkRvbS5fZ2V0WFkoRyk7aWYoKEFEWzBdIT09bnVsbCYmeFswXSE9QURbMF0p fHwoQURbMV0hPT1udWxsJiZ4WzFdIT1BRFsxXSkpe0UuRG9tLl9zZXRYWShHLHtw b3M6QUQsbm9SZXRyeTp0cnVlfSk7fX19LHNldFg6ZnVuY3Rpb24oWSxHKXtFLkRv bS5zZXRYWShZLFtHLG51bGxdKTt9LHNldFk6ZnVuY3Rpb24oRyxZKXtFLkRvbS5z ZXRYWShHLFtudWxsLFldKTt9LGdldFJlZ2lvbjpmdW5jdGlvbihHKXt2YXIgWT1m dW5jdGlvbih4KXt2YXIgeT1mYWxzZTtpZihFLkRvbS5fY2FuUG9zaXRpb24oeCkp e3k9RS5SZWdpb24uZ2V0UmVnaW9uKHgpO31lbHNle31yZXR1cm4geTt9O3JldHVy biBFLkRvbS5iYXRjaChHLFksRS5Eb20sdHJ1ZSk7fSxnZXRDbGllbnRXaWR0aDpm dW5jdGlvbigpe3JldHVybiBFLkRvbS5nZXRWaWV3cG9ydFdpZHRoKCk7fSxnZXRD bGllbnRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5Eb20uZ2V0Vmlld3BvcnRI ZWlnaHQoKTt9LGdldEVsZW1lbnRzQnlDbGFzc05hbWU6ZnVuY3Rpb24oQUIsQUYs QUMsQUUseCxBRCl7QUI9TC50cmltKEFCKTtBRj1BRnx8IioiO0FDPShBQyk/RS5E b20uZ2V0KEFDKTpudWxsfHxLO2lmKCFBQyl7cmV0dXJuW107fXZhciBZPVtdLEc9 QUMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQUYpLHo9RS5Eb20uaGFzQ2xhc3M7Zm9y KHZhciB5PTAsQUE9Ry5sZW5ndGg7eTxBQTsrK3kpe2lmKHooR1t5XSxBQikpe1lb WS5sZW5ndGhdPUdbeV07fX1pZihBRSl7RS5Eb20uYmF0Y2goWSxBRSx4LEFEKTt9 cmV0dXJuIFk7fSxoYXNDbGFzczpmdW5jdGlvbihZLEcpe3JldHVybiBFLkRvbS5i YXRjaChZLEUuRG9tLl9oYXNDbGFzcyxHKTt9LF9oYXNDbGFzczpmdW5jdGlvbih4 LFkpe3ZhciBHPWZhbHNlLHk7aWYoeCYmWSl7eT1FLkRvbS5nZXRBdHRyaWJ1dGUo eCxGKXx8SjtpZihZLmV4ZWMpe0c9WS50ZXN0KHkpO31lbHNle0c9WSYmKEIreStC KS5pbmRleE9mKEIrWStCKT4tMTt9fWVsc2V7fXJldHVybiBHO30sYWRkQ2xhc3M6 ZnVuY3Rpb24oWSxHKXtyZXR1cm4gRS5Eb20uYmF0Y2goWSxFLkRvbS5fYWRkQ2xh c3MsRyk7fSxfYWRkQ2xhc3M6ZnVuY3Rpb24oeCxZKXt2YXIgRz1mYWxzZSx5O2lm KHgmJlkpe3k9RS5Eb20uZ2V0QXR0cmlidXRlKHgsRil8fEo7aWYoIUUuRG9tLl9o YXNDbGFzcyh4LFkpKXtFLkRvbS5zZXRBdHRyaWJ1dGUoeCxGLEEoeStCK1kpKTtH PXRydWU7fX1lbHNle31yZXR1cm4gRzt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKFks Ryl7cmV0dXJuIEUuRG9tLmJhdGNoKFksRS5Eb20uX3JlbW92ZUNsYXNzLEcpO30s X3JlbW92ZUNsYXNzOmZ1bmN0aW9uKHkseCl7dmFyIFk9ZmFsc2UsQUEseixHO2lm KHkmJngpe0FBPUUuRG9tLmdldEF0dHJpYnV0ZSh5LEYpfHxKO0UuRG9tLnNldEF0 dHJpYnV0ZSh5LEYsQUEucmVwbGFjZShFLkRvbS5fZ2V0Q2xhc3NSZWdleCh4KSxK KSk7ej1FLkRvbS5nZXRBdHRyaWJ1dGUoeSxGKTtpZihBQSE9PXope0UuRG9tLnNl dEF0dHJpYnV0ZSh5LEYsQSh6KSk7WT10cnVlO2lmKEUuRG9tLmdldEF0dHJpYnV0 ZSh5LEYpPT09IiIpe0c9KHkuaGFzQXR0cmlidXRlJiZ5Lmhhc0F0dHJpYnV0ZShn KSk/ZzpGO3kucmVtb3ZlQXR0cmlidXRlKEcpO319fWVsc2V7fXJldHVybiBZO30s cmVwbGFjZUNsYXNzOmZ1bmN0aW9uKHgsWSxHKXtyZXR1cm4gRS5Eb20uYmF0Y2go eCxFLkRvbS5fcmVwbGFjZUNsYXNzLHtmcm9tOlksdG86R30pO30sX3JlcGxhY2VD bGFzczpmdW5jdGlvbih5LHgpe3ZhciBZLEFCLEFBLEc9ZmFsc2UsejtpZih5JiZ4 KXtBQj14LmZyb207QUE9eC50bztpZighQUEpe0c9ZmFsc2U7fWVsc2V7aWYoIUFC KXtHPUUuRG9tLl9hZGRDbGFzcyh5LHgudG8pO31lbHNle2lmKEFCIT09QUEpe3o9 RS5Eb20uZ2V0QXR0cmlidXRlKHksRil8fEo7WT0oQit6LnJlcGxhY2UoRS5Eb20u X2dldENsYXNzUmVnZXgoQUIpLEIrQUEpKS5zcGxpdChFLkRvbS5fZ2V0Q2xhc3NS ZWdleChBQSkpO1kuc3BsaWNlKDEsMCxCK0FBKTtFLkRvbS5zZXRBdHRyaWJ1dGUo eSxGLEEoWS5qb2luKEopKSk7Rz10cnVlO319fX1lbHNle31yZXR1cm4gRzt9LGdl bmVyYXRlSWQ6ZnVuY3Rpb24oRyx4KXt4PXh8fCJ5dWktZ2VuIjt2YXIgWT1mdW5j dGlvbih5KXtpZih5JiZ5LmlkKXtyZXR1cm4geS5pZDt9dmFyIHo9eCtZQUhPTy5l bnYuX2lkX2NvdW50ZXIrKztpZih5KXtpZih5W2VdLmdldEVsZW1lbnRCeUlkKHop KXtyZXR1cm4gRS5Eb20uZ2VuZXJhdGVJZCh5LHoreCk7fXkuaWQ9ejt9cmV0dXJu IHo7fTtyZXR1cm4gRS5Eb20uYmF0Y2goRyxZLEUuRG9tLHRydWUpfHxZLmFwcGx5 KEUuRG9tLGFyZ3VtZW50cyk7fSxpc0FuY2VzdG9yOmZ1bmN0aW9uKFkseCl7WT1F LkRvbS5nZXQoWSk7eD1FLkRvbS5nZXQoeCk7dmFyIEc9ZmFsc2U7aWYoKFkmJngp JiYoWVtsXSYmeFtsXSkpe2lmKFkuY29udGFpbnMmJlkhPT14KXtHPVkuY29udGFp bnMoeCk7fWVsc2V7aWYoWS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7Rz0hIShZ LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHgpJjE2KTt9fX1lbHNle31yZXR1cm4g Rzt9LGluRG9jdW1lbnQ6ZnVuY3Rpb24oRyxZKXtyZXR1cm4gRS5Eb20uX2luRG9j KEUuRG9tLmdldChHKSxZKTt9LF9pbkRvYzpmdW5jdGlvbihZLHgpe3ZhciBHPWZh bHNlO2lmKFkmJllbQ10pe3g9eHx8WVtlXTtHPUUuRG9tLmlzQW5jZXN0b3IoeFt2 XSxZKTt9ZWxzZXt9cmV0dXJuIEc7fSxnZXRFbGVtZW50c0J5OmZ1bmN0aW9uKFks QUYsQUIsQUQseSxBQyxBRSl7QUY9QUZ8fCIqIjtBQj0oQUIpP0UuRG9tLmdldChB Qik6bnVsbHx8SztpZighQUIpe3JldHVybltdO312YXIgeD1bXSxHPUFCLmdldEVs ZW1lbnRzQnlUYWdOYW1lKEFGKTtmb3IodmFyIHo9MCxBQT1HLmxlbmd0aDt6PEFB Oysreil7aWYoWShHW3pdKSl7aWYoQUUpe3g9R1t6XTticmVhazt9ZWxzZXt4W3gu bGVuZ3RoXT1HW3pdO319fWlmKEFEKXtFLkRvbS5iYXRjaCh4LEFELHksQUMpO31y ZXR1cm4geDt9LGdldEVsZW1lbnRCeTpmdW5jdGlvbih4LEcsWSl7cmV0dXJuIEUu RG9tLmdldEVsZW1lbnRzQnkoeCxHLFksbnVsbCxudWxsLG51bGwsdHJ1ZSk7fSxi YXRjaDpmdW5jdGlvbih4LEFCLEFBLHope3ZhciB5PVtdLFk9KHopP0FBOndpbmRv dzt4PSh4JiYoeFtDXXx8eC5pdGVtKSk/eDpFLkRvbS5nZXQoeCk7aWYoeCYmQUIp e2lmKHhbQ118fHgubGVuZ3RoPT09dW5kZWZpbmVkKXtyZXR1cm4gQUIuY2FsbChZ LHgsQUEpO31mb3IodmFyIEc9MDtHPHgubGVuZ3RoOysrRyl7eVt5Lmxlbmd0aF09 QUIuY2FsbChZLHhbR10sQUEpO319ZWxzZXtyZXR1cm4gZmFsc2U7fXJldHVybiB5 O30sZ2V0RG9jdW1lbnRIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgWT0oS1t0XSE9TXx8 SSk/Sy5ib2R5LnNjcm9sbEhlaWdodDpXLnNjcm9sbEhlaWdodCxHPU1hdGgubWF4 KFksRS5Eb20uZ2V0Vmlld3BvcnRIZWlnaHQoKSk7cmV0dXJuIEc7fSxnZXREb2N1 bWVudFdpZHRoOmZ1bmN0aW9uKCl7dmFyIFk9KEtbdF0hPU18fEkpP0suYm9keS5z Y3JvbGxXaWR0aDpXLnNjcm9sbFdpZHRoLEc9TWF0aC5tYXgoWSxFLkRvbS5nZXRW aWV3cG9ydFdpZHRoKCkpO3JldHVybiBHO30sZ2V0Vmlld3BvcnRIZWlnaHQ6ZnVu Y3Rpb24oKXt2YXIgRz1zZWxmLmlubmVySGVpZ2h0LFk9S1t0XTtpZigoWXx8VCkm JiFEKXtHPShZPT1NKT9XLmNsaWVudEhlaWdodDpLLmJvZHkuY2xpZW50SGVpZ2h0 O31yZXR1cm4gRzt9LGdldFZpZXdwb3J0V2lkdGg6ZnVuY3Rpb24oKXt2YXIgRz1z ZWxmLmlubmVyV2lkdGgsWT1LW3RdO2lmKFl8fFQpe0c9KFk9PU0pP1cuY2xpZW50 V2lkdGg6Sy5ib2R5LmNsaWVudFdpZHRoO31yZXR1cm4gRzt9LGdldEFuY2VzdG9y Qnk6ZnVuY3Rpb24oRyxZKXt3aGlsZSgoRz1HW1pdKSl7aWYoRS5Eb20uX3Rlc3RF bGVtZW50KEcsWSkpe3JldHVybiBHO319cmV0dXJuIG51bGw7fSxnZXRBbmNlc3Rv ckJ5Q2xhc3NOYW1lOmZ1bmN0aW9uKFksRyl7WT1FLkRvbS5nZXQoWSk7aWYoIVkp e3JldHVybiBudWxsO312YXIgeD1mdW5jdGlvbih5KXtyZXR1cm4gRS5Eb20uaGFz Q2xhc3MoeSxHKTt9O3JldHVybiBFLkRvbS5nZXRBbmNlc3RvckJ5KFkseCk7fSxn ZXRBbmNlc3RvckJ5VGFnTmFtZTpmdW5jdGlvbihZLEcpe1k9RS5Eb20uZ2V0KFkp O2lmKCFZKXtyZXR1cm4gbnVsbDt9dmFyIHg9ZnVuY3Rpb24oeSl7cmV0dXJuIHlb Q10mJnlbQ10udG9VcHBlckNhc2UoKT09Ry50b1VwcGVyQ2FzZSgpO307cmV0dXJu IEUuRG9tLmdldEFuY2VzdG9yQnkoWSx4KTt9LGdldFByZXZpb3VzU2libGluZ0J5 OmZ1bmN0aW9uKEcsWSl7d2hpbGUoRyl7Rz1HLnByZXZpb3VzU2libGluZztpZihF LkRvbS5fdGVzdEVsZW1lbnQoRyxZKSl7cmV0dXJuIEc7fX1yZXR1cm4gbnVsbDt9 LGdldFByZXZpb3VzU2libGluZzpmdW5jdGlvbihHKXtHPUUuRG9tLmdldChHKTtp ZighRyl7cmV0dXJuIG51bGw7fXJldHVybiBFLkRvbS5nZXRQcmV2aW91c1NpYmxp bmdCeShHKTt9LGdldE5leHRTaWJsaW5nQnk6ZnVuY3Rpb24oRyxZKXt3aGlsZShH KXtHPUcubmV4dFNpYmxpbmc7aWYoRS5Eb20uX3Rlc3RFbGVtZW50KEcsWSkpe3Jl dHVybiBHO319cmV0dXJuIG51bGw7fSxnZXROZXh0U2libGluZzpmdW5jdGlvbihH KXtHPUUuRG9tLmdldChHKTtpZighRyl7cmV0dXJuIG51bGw7fXJldHVybiBFLkRv bS5nZXROZXh0U2libGluZ0J5KEcpO30sZ2V0Rmlyc3RDaGlsZEJ5OmZ1bmN0aW9u KEcseCl7dmFyIFk9KEUuRG9tLl90ZXN0RWxlbWVudChHLmZpcnN0Q2hpbGQseCkp P0cuZmlyc3RDaGlsZDpudWxsO3JldHVybiBZfHxFLkRvbS5nZXROZXh0U2libGlu Z0J5KEcuZmlyc3RDaGlsZCx4KTt9LGdldEZpcnN0Q2hpbGQ6ZnVuY3Rpb24oRyxZ KXtHPUUuRG9tLmdldChHKTtpZighRyl7cmV0dXJuIG51bGw7fXJldHVybiBFLkRv bS5nZXRGaXJzdENoaWxkQnkoRyk7fSxnZXRMYXN0Q2hpbGRCeTpmdW5jdGlvbihH LHgpe2lmKCFHKXtyZXR1cm4gbnVsbDt9dmFyIFk9KEUuRG9tLl90ZXN0RWxlbWVu dChHLmxhc3RDaGlsZCx4KSk/Ry5sYXN0Q2hpbGQ6bnVsbDtyZXR1cm4gWXx8RS5E b20uZ2V0UHJldmlvdXNTaWJsaW5nQnkoRy5sYXN0Q2hpbGQseCk7fSxnZXRMYXN0 Q2hpbGQ6ZnVuY3Rpb24oRyl7Rz1FLkRvbS5nZXQoRyk7cmV0dXJuIEUuRG9tLmdl dExhc3RDaGlsZEJ5KEcpO30sZ2V0Q2hpbGRyZW5CeTpmdW5jdGlvbihZLHkpe3Zh ciB4PUUuRG9tLmdldEZpcnN0Q2hpbGRCeShZLHkpLEc9eD9beF06W107RS5Eb20u Z2V0TmV4dFNpYmxpbmdCeSh4LGZ1bmN0aW9uKHope2lmKCF5fHx5KHopKXtHW0cu bGVuZ3RoXT16O31yZXR1cm4gZmFsc2U7fSk7cmV0dXJuIEc7fSxnZXRDaGlsZHJl bjpmdW5jdGlvbihHKXtHPUUuRG9tLmdldChHKTtpZighRyl7fXJldHVybiBFLkRv bS5nZXRDaGlsZHJlbkJ5KEcpO30sZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0OmZ1bmN0 aW9uKEcpe0c9R3x8SztyZXR1cm4gTWF0aC5tYXgoR1t2XS5zY3JvbGxMZWZ0LEcu Ym9keS5zY3JvbGxMZWZ0KTt9LGdldERvY3VtZW50U2Nyb2xsVG9wOmZ1bmN0aW9u KEcpe0c9R3x8SztyZXR1cm4gTWF0aC5tYXgoR1t2XS5zY3JvbGxUb3AsRy5ib2R5 LnNjcm9sbFRvcCk7fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oWSxHKXtZPUUuRG9t LmdldChZKTtHPUUuRG9tLmdldChHKTtpZighWXx8IUd8fCFHW1pdKXtyZXR1cm4g bnVsbDt9cmV0dXJuIEdbWl0uaW5zZXJ0QmVmb3JlKFksRyk7fSxpbnNlcnRBZnRl cjpmdW5jdGlvbihZLEcpe1k9RS5Eb20uZ2V0KFkpO0c9RS5Eb20uZ2V0KEcpO2lm KCFZfHwhR3x8IUdbWl0pe3JldHVybiBudWxsO31pZihHLm5leHRTaWJsaW5nKXty ZXR1cm4gR1taXS5pbnNlcnRCZWZvcmUoWSxHLm5leHRTaWJsaW5nKTt9ZWxzZXty ZXR1cm4gR1taXS5hcHBlbmRDaGlsZChZKTt9fSxnZXRDbGllbnRSZWdpb246ZnVu Y3Rpb24oKXt2YXIgeD1FLkRvbS5nZXREb2N1bWVudFNjcm9sbFRvcCgpLFk9RS5E b20uZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KCkseT1FLkRvbS5nZXRWaWV3cG9ydFdp ZHRoKCkrWSxHPUUuRG9tLmdldFZpZXdwb3J0SGVpZ2h0KCkreDtyZXR1cm4gbmV3 IEUuUmVnaW9uKHgseSxHLFkpO30sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKFksRyx4 KXtHPUUuRG9tLkNVU1RPTV9BVFRSSUJVVEVTW0ddfHxHO1kuc2V0QXR0cmlidXRl KEcseCk7fSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oWSxHKXtHPUUuRG9tLkNVU1RP TV9BVFRSSUJVVEVTW0ddfHxHO3JldHVybiBZLmdldEF0dHJpYnV0ZShHKTt9LF90 b0NhbWVsOmZ1bmN0aW9uKFkpe3ZhciB4PWQ7ZnVuY3Rpb24gRyh5LHope3JldHVy biB6LnRvVXBwZXJDYXNlKCk7fXJldHVybiB4W1ldfHwoeFtZXT1ZLmluZGV4T2Yo Ii0iKT09PS0xP1k6WS5yZXBsYWNlKC8tKFthLXpdKS9naSxHKSk7fSxfZ2V0Q2xh c3NSZWdleDpmdW5jdGlvbihZKXt2YXIgRztpZihZIT09dW5kZWZpbmVkKXtpZihZ LmV4ZWMpe0c9WTt9ZWxzZXtHPWhbWV07aWYoIUcpe1k9WS5yZXBsYWNlKEUuRG9t Ll9wYXR0ZXJucy5DTEFTU19SRV9UT0tFTlMsIlxcJDEiKTtHPWhbWV09bmV3IFJl Z0V4cChzK1krayxVKTt9fX1yZXR1cm4gRzt9LF9wYXR0ZXJuczp7Uk9PVF9UQUc6 L15ib2R5fGh0bWwkL2ksQ0xBU1NfUkVfVE9LRU5TOi8oW1wuXChcKVxeXCRcKlwr XD9cfFxbXF1ce1x9XSkvZ30sX3Rlc3RFbGVtZW50OmZ1bmN0aW9uKEcsWSl7cmV0 dXJuIEcmJkdbbF09PTEmJighWXx8WShHKSk7fSxfY2FsY0JvcmRlcnM6ZnVuY3Rp b24oeCx5KXt2YXIgWT1wYXJzZUludChFLkRvbVt3XSh4LFIpLDEwKXx8MCxHPXBh cnNlSW50KEUuRG9tW3ddKHgscSksMTApfHwwO2lmKEgpe2lmKE4udGVzdCh4W0Nd KSl7WT0wO0c9MDt9fXlbMF0rPUc7eVsxXSs9WTtyZXR1cm4geTt9fTt2YXIgUz1F LkRvbVt3XTtpZihtLm9wZXJhKXtFLkRvbVt3XT1mdW5jdGlvbihZLEcpe3ZhciB4 PVMoWSxHKTtpZihYLnRlc3QoRykpe3g9RS5Eb20uQ29sb3IudG9SR0IoeCk7fXJl dHVybiB4O307fWlmKG0ud2Via2l0KXtFLkRvbVt3XT1mdW5jdGlvbihZLEcpe3Zh ciB4PVMoWSxHKTtpZih4PT09InJnYmEoMCwgMCwgMCwgMCkiKXt4PSJ0cmFuc3Bh cmVudCI7fXJldHVybiB4O307fX0pKCk7WUFIT08udXRpbC5SZWdpb249ZnVuY3Rp b24oQyxELEEsQil7dGhpcy50b3A9Qzt0aGlzLnk9Qzt0aGlzWzFdPUM7dGhpcy5y aWdodD1EO3RoaXMuYm90dG9tPUE7dGhpcy5sZWZ0PUI7dGhpcy54PUI7dGhpc1sw XT1CO3RoaXMud2lkdGg9dGhpcy5yaWdodC10aGlzLmxlZnQ7dGhpcy5oZWlnaHQ9 dGhpcy5ib3R0b20tdGhpcy50b3A7fTtZQUhPTy51dGlsLlJlZ2lvbi5wcm90b3R5 cGUuY29udGFpbnM9ZnVuY3Rpb24oQSl7cmV0dXJuKEEubGVmdD49dGhpcy5sZWZ0 JiZBLnJpZ2h0PD10aGlzLnJpZ2h0JiZBLnRvcD49dGhpcy50b3AmJkEuYm90dG9t PD10aGlzLmJvdHRvbSk7fTtZQUhPTy51dGlsLlJlZ2lvbi5wcm90b3R5cGUuZ2V0 QXJlYT1mdW5jdGlvbigpe3JldHVybigodGhpcy5ib3R0b20tdGhpcy50b3ApKih0 aGlzLnJpZ2h0LXRoaXMubGVmdCkpO307WUFIT08udXRpbC5SZWdpb24ucHJvdG90 eXBlLmludGVyc2VjdD1mdW5jdGlvbihFKXt2YXIgQz1NYXRoLm1heCh0aGlzLnRv cCxFLnRvcCksRD1NYXRoLm1pbih0aGlzLnJpZ2h0LEUucmlnaHQpLEE9TWF0aC5t aW4odGhpcy5ib3R0b20sRS5ib3R0b20pLEI9TWF0aC5tYXgodGhpcy5sZWZ0LEUu bGVmdCk7aWYoQT49QyYmRD49Qil7cmV0dXJuIG5ldyBZQUhPTy51dGlsLlJlZ2lv bihDLEQsQSxCKTt9ZWxzZXtyZXR1cm4gbnVsbDt9fTtZQUhPTy51dGlsLlJlZ2lv bi5wcm90b3R5cGUudW5pb249ZnVuY3Rpb24oRSl7dmFyIEM9TWF0aC5taW4odGhp cy50b3AsRS50b3ApLEQ9TWF0aC5tYXgodGhpcy5yaWdodCxFLnJpZ2h0KSxBPU1h dGgubWF4KHRoaXMuYm90dG9tLEUuYm90dG9tKSxCPU1hdGgubWluKHRoaXMubGVm dCxFLmxlZnQpO3JldHVybiBuZXcgWUFIT08udXRpbC5SZWdpb24oQyxELEEsQik7 fTtZQUhPTy51dGlsLlJlZ2lvbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24o KXtyZXR1cm4oIlJlZ2lvbiB7IisidG9wOiAiK3RoaXMudG9wKyIsIHJpZ2h0OiAi K3RoaXMucmlnaHQrIiwgYm90dG9tOiAiK3RoaXMuYm90dG9tKyIsIGxlZnQ6ICIr dGhpcy5sZWZ0KyIsIGhlaWdodDogIit0aGlzLmhlaWdodCsiLCB3aWR0aDogIit0 aGlzLndpZHRoKyJ9Iik7fTtZQUhPTy51dGlsLlJlZ2lvbi5nZXRSZWdpb249ZnVu Y3Rpb24oRCl7dmFyIEY9WUFIT08udXRpbC5Eb20uZ2V0WFkoRCksQz1GWzFdLEU9 RlswXStELm9mZnNldFdpZHRoLEE9RlsxXStELm9mZnNldEhlaWdodCxCPUZbMF07 cmV0dXJuIG5ldyBZQUhPTy51dGlsLlJlZ2lvbihDLEUsQSxCKTt9O1lBSE9PLnV0 aWwuUG9pbnQ9ZnVuY3Rpb24oQSxCKXtpZihZQUhPTy5sYW5nLmlzQXJyYXkoQSkp e0I9QVsxXTtBPUFbMF07fVlBSE9PLnV0aWwuUG9pbnQuc3VwZXJjbGFzcy5jb25z dHJ1Y3Rvci5jYWxsKHRoaXMsQixBLEIsQSk7fTtZQUhPTy5leHRlbmQoWUFIT08u dXRpbC5Qb2ludCxZQUhPTy51dGlsLlJlZ2lvbik7KGZ1bmN0aW9uKCl7dmFyIEI9 WUFIT08udXRpbCxBPSJjbGllbnRUb3AiLEY9ImNsaWVudExlZnQiLEo9InBhcmVu dE5vZGUiLEs9InJpZ2h0IixXPSJoYXNMYXlvdXQiLEk9InB4IixVPSJvcGFjaXR5 IixMPSJhdXRvIixEPSJib3JkZXJMZWZ0V2lkdGgiLEc9ImJvcmRlclRvcFdpZHRo IixQPSJib3JkZXJSaWdodFdpZHRoIixWPSJib3JkZXJCb3R0b21XaWR0aCIsUz0i dmlzaWJsZSIsUT0idHJhbnNwYXJlbnQiLE49ImhlaWdodCIsRT0id2lkdGgiLEg9 InN0eWxlIixUPSJjdXJyZW50U3R5bGUiLFI9L153aWR0aHxoZWlnaHQkLyxPPS9e KFxkWy5cZF0qKSsoZW18ZXh8cHh8Z2R8cmVtfHZ3fHZofHZtfGNofG1tfGNtfGlu fHB0fHBjfGRlZ3xyYWR8bXN8c3xoenxraHp8JSl7MX0/L2ksTT17Z2V0OmZ1bmN0 aW9uKFgsWil7dmFyIFk9IiIsYT1YW1RdW1pdO2lmKFo9PT1VKXtZPUIuRG9tLmdl dFN0eWxlKFgsVSk7fWVsc2V7aWYoIWF8fChhLmluZGV4T2YmJmEuaW5kZXhPZihJ KT4tMSkpe1k9YTt9ZWxzZXtpZihCLkRvbS5JRV9DT01QVVRFRFtaXSl7WT1CLkRv bS5JRV9DT01QVVRFRFtaXShYLFopO31lbHNle2lmKE8udGVzdChhKSl7WT1CLkRv bS5JRS5Db21wdXRlZFN0eWxlLmdldFBpeGVsKFgsWik7fWVsc2V7WT1hO319fX1y ZXR1cm4gWTt9LGdldE9mZnNldDpmdW5jdGlvbihaLGUpe3ZhciBiPVpbVF1bZV0s WD1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyKDEpLGM9Im9mZnNl dCIrWCxZPSJwaXhlbCIrWCxhPSIiLGQ7aWYoYj09TCl7ZD1aW2NdO2lmKGQ9PT11 bmRlZmluZWQpe2E9MDt9YT1kO2lmKFIudGVzdChlKSl7WltIXVtlXT1kO2lmKFpb Y10+ZCl7YT1kLShaW2NdLWQpO31aW0hdW2VdPUw7fX1lbHNle2lmKCFaW0hdW1ld JiYhWltIXVtlXSl7WltIXVtlXT1iO31hPVpbSF1bWV07fXJldHVybiBhK0k7fSxn ZXRCb3JkZXJXaWR0aDpmdW5jdGlvbihYLFope3ZhciBZPW51bGw7aWYoIVhbVF1b V10pe1hbSF0uem9vbT0xO31zd2l0Y2goWil7Y2FzZSBHOlk9WFtBXTticmVhaztj YXNlIFY6WT1YLm9mZnNldEhlaWdodC1YLmNsaWVudEhlaWdodC1YW0FdO2JyZWFr O2Nhc2UgRDpZPVhbRl07YnJlYWs7Y2FzZSBQOlk9WC5vZmZzZXRXaWR0aC1YLmNs aWVudFdpZHRoLVhbRl07YnJlYWs7fXJldHVybiBZK0k7fSxnZXRQaXhlbDpmdW5j dGlvbihZLFgpe3ZhciBhPW51bGwsYj1ZW1RdW0tdLFo9WVtUXVtYXTtZW0hdW0td PVo7YT1ZW0hdLnBpeGVsUmlnaHQ7WVtIXVtLXT1iO3JldHVybiBhK0k7fSxnZXRN YXJnaW46ZnVuY3Rpb24oWSxYKXt2YXIgWjtpZihZW1RdW1hdPT1MKXtaPTArSTt9 ZWxzZXtaPUIuRG9tLklFLkNvbXB1dGVkU3R5bGUuZ2V0UGl4ZWwoWSxYKTt9cmV0 dXJuIFo7fSxnZXRWaXNpYmlsaXR5OmZ1bmN0aW9uKFksWCl7dmFyIFo7d2hpbGUo KFo9WVtUXSkmJlpbWF09PSJpbmhlcml0Iil7WT1ZW0pdO31yZXR1cm4oWik/WltY XTpTO30sZ2V0Q29sb3I6ZnVuY3Rpb24oWSxYKXtyZXR1cm4gQi5Eb20uQ29sb3Iu dG9SR0IoWVtUXVtYXSl8fFE7fSxnZXRCb3JkZXJDb2xvcjpmdW5jdGlvbihZLFgp e3ZhciBaPVlbVF0sYT1aW1hdfHxaLmNvbG9yO3JldHVybiBCLkRvbS5Db2xvci50 b1JHQihCLkRvbS5Db2xvci50b0hleChhKSk7fX0sQz17fTtDLnRvcD1DLnJpZ2h0 PUMuYm90dG9tPUMubGVmdD1DW0VdPUNbTl09TS5nZXRPZmZzZXQ7Qy5jb2xvcj1N LmdldENvbG9yO0NbR109Q1tQXT1DW1ZdPUNbRF09TS5nZXRCb3JkZXJXaWR0aDtD Lm1hcmdpblRvcD1DLm1hcmdpblJpZ2h0PUMubWFyZ2luQm90dG9tPUMubWFyZ2lu TGVmdD1NLmdldE1hcmdpbjtDLnZpc2liaWxpdHk9TS5nZXRWaXNpYmlsaXR5O0Mu Ym9yZGVyQ29sb3I9Qy5ib3JkZXJUb3BDb2xvcj1DLmJvcmRlclJpZ2h0Q29sb3I9 Qy5ib3JkZXJCb3R0b21Db2xvcj1DLmJvcmRlckxlZnRDb2xvcj1NLmdldEJvcmRl ckNvbG9yO0IuRG9tLklFX0NPTVBVVEVEPUM7Qi5Eb20uSUVfQ29tcHV0ZWRTdHls ZT1NO30pKCk7KGZ1bmN0aW9uKCl7dmFyIEM9InRvU3RyaW5nIixBPXBhcnNlSW50 LEI9UmVnRXhwLEQ9WUFIT08udXRpbDtELkRvbS5Db2xvcj17S0VZV09SRFM6e2Js YWNrOiIwMDAiLHNpbHZlcjoiYzBjMGMwIixncmF5OiI4MDgwODAiLHdoaXRlOiJm ZmYiLG1hcm9vbjoiODAwMDAwIixyZWQ6ImYwMCIscHVycGxlOiI4MDAwODAiLGZ1 Y2hzaWE6ImYwZiIsZ3JlZW46IjAwODAwMCIsbGltZToiMGYwIixvbGl2ZToiODA4 MDAwIix5ZWxsb3c6ImZmMCIsbmF2eToiMDAwMDgwIixibHVlOiIwMGYiLHRlYWw6 IjAwODA4MCIsYXF1YToiMGZmIn0scmVfUkdCOi9ecmdiXCgoWzAtOV0rKVxzKixc cyooWzAtOV0rKVxzKixccyooWzAtOV0rKVwpJC9pLHJlX2hleDovXiM/KFswLTlB LUZdezJ9KShbMC05QS1GXXsyfSkoWzAtOUEtRl17Mn0pJC9pLHJlX2hleDM6Lyhb MC05QS1GXSkvZ2ksdG9SR0I6ZnVuY3Rpb24oRSl7aWYoIUQuRG9tLkNvbG9yLnJl X1JHQi50ZXN0KEUpKXtFPUQuRG9tLkNvbG9yLnRvSGV4KEUpO31pZihELkRvbS5D b2xvci5yZV9oZXguZXhlYyhFKSl7RT0icmdiKCIrW0EoQi4kMSwxNiksQShCLiQy LDE2KSxBKEIuJDMsMTYpXS5qb2luKCIsICIpKyIpIjt9cmV0dXJuIEU7fSx0b0hl eDpmdW5jdGlvbihIKXtIPUQuRG9tLkNvbG9yLktFWVdPUkRTW0hdfHxIO2lmKEQu RG9tLkNvbG9yLnJlX1JHQi5leGVjKEgpKXt2YXIgRz0oQi4kMS5sZW5ndGg9PT0x KT8iMCIrQi4kMTpOdW1iZXIoQi4kMSksRj0oQi4kMi5sZW5ndGg9PT0xKT8iMCIr Qi4kMjpOdW1iZXIoQi4kMiksRT0oQi4kMy5sZW5ndGg9PT0xKT8iMCIrQi4kMzpO dW1iZXIoQi4kMyk7SD1bR1tDXSgxNiksRltDXSgxNiksRVtDXSgxNildLmpvaW4o IiIpO31pZihILmxlbmd0aDw2KXtIPUgucmVwbGFjZShELkRvbS5Db2xvci5yZV9o ZXgzLCIkMSQxIik7fWlmKEghPT0idHJhbnNwYXJlbnQiJiZILmluZGV4T2YoIiMi KTwwKXtIPSIjIitIO31yZXR1cm4gSC50b0xvd2VyQ2FzZSgpO319O30oKSk7WUFI T08ucmVnaXN0ZXIoImRvbSIsWUFIT08udXRpbC5Eb20se3ZlcnNpb246IjIuNy4w IixidWlsZDoiMTc5OSJ9KTtZQUhPTy51dGlsLkN1c3RvbUV2ZW50PWZ1bmN0aW9u KEQsQyxCLEEpe3RoaXMudHlwZT1EO3RoaXMuc2NvcGU9Q3x8d2luZG93O3RoaXMu c2lsZW50PUI7dGhpcy5zaWduYXR1cmU9QXx8WUFIT08udXRpbC5DdXN0b21FdmVu dC5MSVNUO3RoaXMuc3Vic2NyaWJlcnM9W107aWYoIXRoaXMuc2lsZW50KXt9dmFy IEU9Il9ZVUlDRU9uU3Vic2NyaWJlIjtpZihEIT09RSl7dGhpcy5zdWJzY3JpYmVF dmVudD1uZXcgWUFIT08udXRpbC5DdXN0b21FdmVudChFLHRoaXMsdHJ1ZSk7fXRo aXMubGFzdEVycm9yPW51bGw7fTtZQUhPTy51dGlsLkN1c3RvbUV2ZW50LkxJU1Q9 MDtZQUhPTy51dGlsLkN1c3RvbUV2ZW50LkZMQVQ9MTtZQUhPTy51dGlsLkN1c3Rv bUV2ZW50LnByb3RvdHlwZT17c3Vic2NyaWJlOmZ1bmN0aW9uKEEsQixDKXtpZigh QSl7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNhbGxiYWNrIGZvciBzdWJzY3Jp YmVyIHRvICciK3RoaXMudHlwZSsiJyIpO31pZih0aGlzLnN1YnNjcmliZUV2ZW50 KXt0aGlzLnN1YnNjcmliZUV2ZW50LmZpcmUoQSxCLEMpO310aGlzLnN1YnNjcmli ZXJzLnB1c2gobmV3IFlBSE9PLnV0aWwuU3Vic2NyaWJlcihBLEIsQykpO30sdW5z dWJzY3JpYmU6ZnVuY3Rpb24oRCxGKXtpZighRCl7cmV0dXJuIHRoaXMudW5zdWJz Y3JpYmVBbGwoKTt9dmFyIEU9ZmFsc2U7Zm9yKHZhciBCPTAsQT10aGlzLnN1YnNj cmliZXJzLmxlbmd0aDtCPEE7KytCKXt2YXIgQz10aGlzLnN1YnNjcmliZXJzW0Jd O2lmKEMmJkMuY29udGFpbnMoRCxGKSl7dGhpcy5fZGVsZXRlKEIpO0U9dHJ1ZTt9 fXJldHVybiBFO30sZmlyZTpmdW5jdGlvbigpe3RoaXMubGFzdEVycm9yPW51bGw7 dmFyIEs9W10sRT10aGlzLnN1YnNjcmliZXJzLmxlbmd0aDtpZighRSYmdGhpcy5z aWxlbnQpe3JldHVybiB0cnVlO312YXIgST1bXS5zbGljZS5jYWxsKGFyZ3VtZW50 cywwKSxHPXRydWUsRCxKPWZhbHNlO2lmKCF0aGlzLnNpbGVudCl7fXZhciBDPXRo aXMuc3Vic2NyaWJlcnMuc2xpY2UoKSxBPVlBSE9PLnV0aWwuRXZlbnQudGhyb3dF cnJvcnM7Zm9yKEQ9MDtEPEU7KytEKXt2YXIgTT1DW0RdO2lmKCFNKXtKPXRydWU7 fWVsc2V7aWYoIXRoaXMuc2lsZW50KXt9dmFyIEw9TS5nZXRTY29wZSh0aGlzLnNj b3BlKTtpZih0aGlzLnNpZ25hdHVyZT09WUFIT08udXRpbC5DdXN0b21FdmVudC5G TEFUKXt2YXIgQj1udWxsO2lmKEkubGVuZ3RoPjApe0I9SVswXTt9dHJ5e0c9TS5m bi5jYWxsKEwsQixNLm9iaik7fWNhdGNoKEYpe3RoaXMubGFzdEVycm9yPUY7aWYo QSl7dGhyb3cgRjt9fX1lbHNle3RyeXtHPU0uZm4uY2FsbChMLHRoaXMudHlwZSxJ LE0ub2JqKTt9Y2F0Y2goSCl7dGhpcy5sYXN0RXJyb3I9SDtpZihBKXt0aHJvdyBI O319fWlmKGZhbHNlPT09Ryl7aWYoIXRoaXMuc2lsZW50KXt9YnJlYWs7fX19cmV0 dXJuKEchPT1mYWxzZSk7fSx1bnN1YnNjcmliZUFsbDpmdW5jdGlvbigpe3ZhciBB PXRoaXMuc3Vic2NyaWJlcnMubGVuZ3RoLEI7Zm9yKEI9QS0xO0I+LTE7Qi0tKXt0 aGlzLl9kZWxldGUoQik7fXRoaXMuc3Vic2NyaWJlcnM9W107cmV0dXJuIEE7fSxf ZGVsZXRlOmZ1bmN0aW9uKEEpe3ZhciBCPXRoaXMuc3Vic2NyaWJlcnNbQV07aWYo Qil7ZGVsZXRlIEIuZm47ZGVsZXRlIEIub2JqO310aGlzLnN1YnNjcmliZXJzLnNw bGljZShBLDEpO30sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iQ3VzdG9tRXZl bnQ6ICIrIiciK3RoaXMudHlwZSsiJywgIisiY29udGV4dDogIit0aGlzLnNjb3Bl O319O1lBSE9PLnV0aWwuU3Vic2NyaWJlcj1mdW5jdGlvbihBLEIsQyl7dGhpcy5m bj1BO3RoaXMub2JqPVlBSE9PLmxhbmcuaXNVbmRlZmluZWQoQik/bnVsbDpCO3Ro aXMub3ZlcnJpZGVDb250ZXh0PUM7fTtZQUhPTy51dGlsLlN1YnNjcmliZXIucHJv dG90eXBlLmdldFNjb3BlPWZ1bmN0aW9uKEEpe2lmKHRoaXMub3ZlcnJpZGVDb250 ZXh0KXtpZih0aGlzLm92ZXJyaWRlQ29udGV4dD09PXRydWUpe3JldHVybiB0aGlz Lm9iajt9ZWxzZXtyZXR1cm4gdGhpcy5vdmVycmlkZUNvbnRleHQ7fX1yZXR1cm4g QTt9O1lBSE9PLnV0aWwuU3Vic2NyaWJlci5wcm90b3R5cGUuY29udGFpbnM9ZnVu Y3Rpb24oQSxCKXtpZihCKXtyZXR1cm4odGhpcy5mbj09QSYmdGhpcy5vYmo9PUIp O31lbHNle3JldHVybih0aGlzLmZuPT1BKTt9fTtZQUhPTy51dGlsLlN1YnNjcmli ZXIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlN1YnNjcmli ZXIgeyBvYmo6ICIrdGhpcy5vYmorIiwgb3ZlcnJpZGVDb250ZXh0OiAiKyh0aGlz Lm92ZXJyaWRlQ29udGV4dHx8Im5vIikrIiB9Ijt9O2lmKCFZQUhPTy51dGlsLkV2 ZW50KXtZQUhPTy51dGlsLkV2ZW50PWZ1bmN0aW9uKCl7dmFyIEg9ZmFsc2U7dmFy IEk9W107dmFyIEo9W107dmFyIEc9W107dmFyIEU9W107dmFyIEM9MDt2YXIgRj1b XTt2YXIgQj1bXTt2YXIgQT0wO3ZhciBEPXs2MzIzMjozOCw2MzIzMzo0MCw2MzIz NDozNyw2MzIzNTozOSw2MzI3NjozMyw2MzI3NzozNCwyNTo5fTt2YXIgSz1ZQUhP Ty5lbnYudWEuaWU/ImZvY3VzaW4iOiJmb2N1cyI7dmFyIEw9WUFIT08uZW52LnVh LmllPyJmb2N1c291dCI6ImJsdXIiO3JldHVybntQT0xMX1JFVFJZUzoyMDAwLFBP TExfSU5URVJWQUw6MjAsRUw6MCxUWVBFOjEsRk46MixXRk46MyxVTkxPQURfT0JK OjMsQURKX1NDT1BFOjQsT0JKOjUsT1ZFUlJJREU6NixsYXN0RXJyb3I6bnVsbCxp c1NhZmFyaTpZQUhPTy5lbnYudWEud2Via2l0LHdlYmtpdDpZQUhPTy5lbnYudWEu d2Via2l0LGlzSUU6WUFIT08uZW52LnVhLmllLF9pbnRlcnZhbDpudWxsLF9kcmk6 bnVsbCxET01SZWFkeTpmYWxzZSx0aHJvd0Vycm9yczpmYWxzZSxzdGFydEludGVy dmFsOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ludGVydmFsKXt2YXIgTT10aGlzO3Zh ciBOPWZ1bmN0aW9uKCl7TS5fdHJ5UHJlbG9hZEF0dGFjaCgpO307dGhpcy5faW50 ZXJ2YWw9c2V0SW50ZXJ2YWwoTix0aGlzLlBPTExfSU5URVJWQUwpO319LG9uQXZh aWxhYmxlOmZ1bmN0aW9uKFMsTyxRLFIsUCl7dmFyIE09KFlBSE9PLmxhbmcuaXNT dHJpbmcoUykpP1tTXTpTO2Zvcih2YXIgTj0wO048TS5sZW5ndGg7Tj1OKzEpe0Yu cHVzaCh7aWQ6TVtOXSxmbjpPLG9iajpRLG92ZXJyaWRlQ29udGV4dDpSLGNoZWNr UmVhZHk6UH0pO31DPXRoaXMuUE9MTF9SRVRSWVM7dGhpcy5zdGFydEludGVydmFs KCk7fSxvbkNvbnRlbnRSZWFkeTpmdW5jdGlvbihQLE0sTixPKXt0aGlzLm9uQXZh aWxhYmxlKFAsTSxOLE8sdHJ1ZSk7fSxvbkRPTVJlYWR5OmZ1bmN0aW9uKE0sTixP KXtpZih0aGlzLkRPTVJlYWR5KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIFA9 d2luZG93O2lmKE8pe2lmKE89PT10cnVlKXtQPU47fWVsc2V7UD1PO319TS5jYWxs KFAsIkRPTVJlYWR5IixbXSxOKTt9LDApO31lbHNle3RoaXMuRE9NUmVhZHlFdmVu dC5zdWJzY3JpYmUoTSxOLE8pO319LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbihPLE0s WSxTLFcsYil7aWYoIVl8fCFZLmNhbGwpe3JldHVybiBmYWxzZTt9aWYodGhpcy5f aXNWYWxpZENvbGxlY3Rpb24oTykpe3ZhciBaPXRydWU7Zm9yKHZhciBUPTAsVj1P Lmxlbmd0aDtUPFY7KytUKXtaPXRoaXMub24oT1tUXSxNLFksUyxXKSYmWjt9cmV0 dXJuIFo7fWVsc2V7aWYoWUFIT08ubGFuZy5pc1N0cmluZyhPKSl7dmFyIFI9dGhp cy5nZXRFbChPKTtpZihSKXtPPVI7fWVsc2V7dGhpcy5vbkF2YWlsYWJsZShPLGZ1 bmN0aW9uKCl7WUFIT08udXRpbC5FdmVudC5vbihPLE0sWSxTLFcpO30pO3JldHVy biB0cnVlO319fWlmKCFPKXtyZXR1cm4gZmFsc2U7fWlmKCJ1bmxvYWQiPT1NJiZT IT09dGhpcyl7SltKLmxlbmd0aF09W08sTSxZLFMsV107cmV0dXJuIHRydWU7fXZh ciBOPU87aWYoVyl7aWYoVz09PXRydWUpe049Uzt9ZWxzZXtOPVc7fX12YXIgUD1m dW5jdGlvbihjKXtyZXR1cm4gWS5jYWxsKE4sWUFIT08udXRpbC5FdmVudC5nZXRF dmVudChjLE8pLFMpO307dmFyIGE9W08sTSxZLFAsTixTLFddO3ZhciBVPUkubGVu Z3RoO0lbVV09YTtpZih0aGlzLnVzZUxlZ2FjeUV2ZW50KE8sTSkpe3ZhciBRPXRo aXMuZ2V0TGVnYWN5SW5kZXgoTyxNKTtpZihRPT0tMXx8TyE9R1tRXVswXSl7UT1H Lmxlbmd0aDtCW08uaWQrTV09UTtHW1FdPVtPLE0sT1sib24iK01dXTtFW1FdPVtd O09bIm9uIitNXT1mdW5jdGlvbihjKXtZQUhPTy51dGlsLkV2ZW50LmZpcmVMZWdh Y3lFdmVudChZQUhPTy51dGlsLkV2ZW50LmdldEV2ZW50KGMpLFEpO307fUVbUV0u cHVzaChhKTt9ZWxzZXt0cnl7dGhpcy5fc2ltcGxlQWRkKE8sTSxQLGIpO31jYXRj aChYKXt0aGlzLmxhc3RFcnJvcj1YO3RoaXMucmVtb3ZlTGlzdGVuZXIoTyxNLFkp O3JldHVybiBmYWxzZTt9fXJldHVybiB0cnVlO30sYWRkTGlzdGVuZXI6ZnVuY3Rp b24oTixRLE0sTyxQKXtyZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIoTixRLE0sTyxQ LGZhbHNlKTt9LGFkZEZvY3VzTGlzdGVuZXI6ZnVuY3Rpb24oTixNLE8sUCl7cmV0 dXJuIHRoaXMuX2FkZExpc3RlbmVyKE4sSyxNLE8sUCx0cnVlKTt9LHJlbW92ZUZv Y3VzTGlzdGVuZXI6ZnVuY3Rpb24oTixNKXtyZXR1cm4gdGhpcy5yZW1vdmVMaXN0 ZW5lcihOLEssTSk7fSxhZGRCbHVyTGlzdGVuZXI6ZnVuY3Rpb24oTixNLE8sUCl7 cmV0dXJuIHRoaXMuX2FkZExpc3RlbmVyKE4sTCxNLE8sUCx0cnVlKTt9LHJlbW92 ZUJsdXJMaXN0ZW5lcjpmdW5jdGlvbihOLE0pe3JldHVybiB0aGlzLnJlbW92ZUxp c3RlbmVyKE4sTCxNKTt9LGZpcmVMZWdhY3lFdmVudDpmdW5jdGlvbihSLFApe3Zh ciBUPXRydWUsTSxWLFUsTixTO1Y9RVtQXS5zbGljZSgpO2Zvcih2YXIgTz0wLFE9 Vi5sZW5ndGg7TzxROysrTyl7VT1WW09dO2lmKFUmJlVbdGhpcy5XRk5dKXtOPVVb dGhpcy5BREpfU0NPUEVdO1M9VVt0aGlzLldGTl0uY2FsbChOLFIpO1Q9KFQmJlMp O319TT1HW1BdO2lmKE0mJk1bMl0pe01bMl0oUik7fXJldHVybiBUO30sZ2V0TGVn YWN5SW5kZXg6ZnVuY3Rpb24oTixPKXt2YXIgTT10aGlzLmdlbmVyYXRlSWQoTikr TztpZih0eXBlb2YgQltNXT09InVuZGVmaW5lZCIpe3JldHVybi0xO31lbHNle3Jl dHVybiBCW01dO319LHVzZUxlZ2FjeUV2ZW50OmZ1bmN0aW9uKE0sTil7cmV0dXJu KHRoaXMud2Via2l0JiZ0aGlzLndlYmtpdDw0MTkmJigiY2xpY2siPT1OfHwiZGJs Y2xpY2siPT1OKSk7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihOLE0sVil7dmFy IFEsVCxYO2lmKHR5cGVvZiBOPT0ic3RyaW5nIil7Tj10aGlzLmdldEVsKE4pO31l bHNle2lmKHRoaXMuX2lzVmFsaWRDb2xsZWN0aW9uKE4pKXt2YXIgVz10cnVlO2Zv cihRPU4ubGVuZ3RoLTE7UT4tMTtRLS0pe1c9KHRoaXMucmVtb3ZlTGlzdGVuZXIo TltRXSxNLFYpJiZXKTt9cmV0dXJuIFc7fX1pZighVnx8IVYuY2FsbCl7cmV0dXJu IHRoaXMucHVyZ2VFbGVtZW50KE4sZmFsc2UsTSk7fWlmKCJ1bmxvYWQiPT1NKXtm b3IoUT1KLmxlbmd0aC0xO1E+LTE7US0tKXtYPUpbUV07aWYoWCYmWFswXT09TiYm WFsxXT09TSYmWFsyXT09Vil7Si5zcGxpY2UoUSwxKTtyZXR1cm4gdHJ1ZTt9fXJl dHVybiBmYWxzZTt9dmFyIFI9bnVsbDt2YXIgUz1hcmd1bWVudHNbM107aWYoInVu ZGVmaW5lZCI9PT10eXBlb2YgUyl7Uz10aGlzLl9nZXRDYWNoZUluZGV4KE4sTSxW KTt9aWYoUz49MCl7Uj1JW1NdO31pZighTnx8IVIpe3JldHVybiBmYWxzZTt9aWYo dGhpcy51c2VMZWdhY3lFdmVudChOLE0pKXt2YXIgUD10aGlzLmdldExlZ2FjeUlu ZGV4KE4sTSk7dmFyIE89RVtQXTtpZihPKXtmb3IoUT0wLFQ9Ty5sZW5ndGg7UTxU OysrUSl7WD1PW1FdO2lmKFgmJlhbdGhpcy5FTF09PU4mJlhbdGhpcy5UWVBFXT09 TSYmWFt0aGlzLkZOXT09Vil7Ty5zcGxpY2UoUSwxKTticmVhazt9fX19ZWxzZXt0 cnl7dGhpcy5fc2ltcGxlUmVtb3ZlKE4sTSxSW3RoaXMuV0ZOXSxmYWxzZSk7fWNh dGNoKFUpe3RoaXMubGFzdEVycm9yPVU7cmV0dXJuIGZhbHNlO319ZGVsZXRlIElb U11bdGhpcy5XRk5dO2RlbGV0ZSBJW1NdW3RoaXMuRk5dO0kuc3BsaWNlKFMsMSk7 cmV0dXJuIHRydWU7fSxnZXRUYXJnZXQ6ZnVuY3Rpb24oTyxOKXt2YXIgTT1PLnRh cmdldHx8Ty5zcmNFbGVtZW50O3JldHVybiB0aGlzLnJlc29sdmVUZXh0Tm9kZShN KTt9LHJlc29sdmVUZXh0Tm9kZTpmdW5jdGlvbihOKXt0cnl7aWYoTiYmMz09Ti5u b2RlVHlwZSl7cmV0dXJuIE4ucGFyZW50Tm9kZTt9fWNhdGNoKE0pe31yZXR1cm4g Tjt9LGdldFBhZ2VYOmZ1bmN0aW9uKE4pe3ZhciBNPU4ucGFnZVg7aWYoIU0mJjAh PT1NKXtNPU4uY2xpZW50WHx8MDtpZih0aGlzLmlzSUUpe00rPXRoaXMuX2dldFNj cm9sbExlZnQoKTt9fXJldHVybiBNO30sZ2V0UGFnZVk6ZnVuY3Rpb24oTSl7dmFy IE49TS5wYWdlWTtpZighTiYmMCE9PU4pe049TS5jbGllbnRZfHwwO2lmKHRoaXMu aXNJRSl7Tis9dGhpcy5fZ2V0U2Nyb2xsVG9wKCk7fX1yZXR1cm4gTjt9LGdldFhZ OmZ1bmN0aW9uKE0pe3JldHVyblt0aGlzLmdldFBhZ2VYKE0pLHRoaXMuZ2V0UGFn ZVkoTSldO30sZ2V0UmVsYXRlZFRhcmdldDpmdW5jdGlvbihOKXt2YXIgTT1OLnJl bGF0ZWRUYXJnZXQ7aWYoIU0pe2lmKE4udHlwZT09Im1vdXNlb3V0Iil7TT1OLnRv RWxlbWVudDt9ZWxzZXtpZihOLnR5cGU9PSJtb3VzZW92ZXIiKXtNPU4uZnJvbUVs ZW1lbnQ7fX19cmV0dXJuIHRoaXMucmVzb2x2ZVRleHROb2RlKE0pO30sZ2V0VGlt ZTpmdW5jdGlvbihPKXtpZighTy50aW1lKXt2YXIgTj1uZXcgRGF0ZSgpLmdldFRp bWUoKTt0cnl7Ty50aW1lPU47fWNhdGNoKE0pe3RoaXMubGFzdEVycm9yPU07cmV0 dXJuIE47fX1yZXR1cm4gTy50aW1lO30sc3RvcEV2ZW50OmZ1bmN0aW9uKE0pe3Ro aXMuc3RvcFByb3BhZ2F0aW9uKE0pO3RoaXMucHJldmVudERlZmF1bHQoTSk7fSxz dG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oTSl7aWYoTS5zdG9wUHJvcGFnYXRpb24p e00uc3RvcFByb3BhZ2F0aW9uKCk7fWVsc2V7TS5jYW5jZWxCdWJibGU9dHJ1ZTt9 fSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbihNKXtpZihNLnByZXZlbnREZWZhdWx0 KXtNLnByZXZlbnREZWZhdWx0KCk7fWVsc2V7TS5yZXR1cm5WYWx1ZT1mYWxzZTt9 fSxnZXRFdmVudDpmdW5jdGlvbihPLE0pe3ZhciBOPU98fHdpbmRvdy5ldmVudDtp ZighTil7dmFyIFA9dGhpcy5nZXRFdmVudC5jYWxsZXI7d2hpbGUoUCl7Tj1QLmFy Z3VtZW50c1swXTtpZihOJiZFdmVudD09Ti5jb25zdHJ1Y3Rvcil7YnJlYWs7fVA9 UC5jYWxsZXI7fX1yZXR1cm4gTjt9LGdldENoYXJDb2RlOmZ1bmN0aW9uKE4pe3Zh ciBNPU4ua2V5Q29kZXx8Ti5jaGFyQ29kZXx8MDtpZihZQUhPTy5lbnYudWEud2Vi a2l0JiYoTSBpbiBEKSl7TT1EW01dO31yZXR1cm4gTTt9LF9nZXRDYWNoZUluZGV4 OmZ1bmN0aW9uKFEsUixQKXtmb3IodmFyIE89MCxOPUkubGVuZ3RoO088TjtPPU8r MSl7dmFyIE09SVtPXTtpZihNJiZNW3RoaXMuRk5dPT1QJiZNW3RoaXMuRUxdPT1R JiZNW3RoaXMuVFlQRV09PVIpe3JldHVybiBPO319cmV0dXJuLTE7fSxnZW5lcmF0 ZUlkOmZ1bmN0aW9uKE0pe3ZhciBOPU0uaWQ7aWYoIU4pe049Inl1aWV2dGF1dG9p ZC0iK0E7KytBO00uaWQ9Tjt9cmV0dXJuIE47fSxfaXNWYWxpZENvbGxlY3Rpb246 ZnVuY3Rpb24oTil7dHJ5e3JldHVybihOJiZ0eXBlb2YgTiE9PSJzdHJpbmciJiZO Lmxlbmd0aCYmIU4udGFnTmFtZSYmIU4uYWxlcnQmJnR5cGVvZiBOWzBdIT09InVu ZGVmaW5lZCIpO31jYXRjaChNKXtyZXR1cm4gZmFsc2U7fX0sZWxDYWNoZTp7fSxn ZXRFbDpmdW5jdGlvbihNKXtyZXR1cm4odHlwZW9mIE09PT0ic3RyaW5nIik/ZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoTSk6TTt9LGNsZWFyQ2FjaGU6ZnVuY3Rpb24o KXt9LERPTVJlYWR5RXZlbnQ6bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoIkRP TVJlYWR5Iix0aGlzKSxfbG9hZDpmdW5jdGlvbihOKXtpZighSCl7SD10cnVlO3Zh ciBNPVlBSE9PLnV0aWwuRXZlbnQ7TS5fcmVhZHkoKTtNLl90cnlQcmVsb2FkQXR0 YWNoKCk7fX0sX3JlYWR5OmZ1bmN0aW9uKE4pe3ZhciBNPVlBSE9PLnV0aWwuRXZl bnQ7aWYoIU0uRE9NUmVhZHkpe00uRE9NUmVhZHk9dHJ1ZTtNLkRPTVJlYWR5RXZl bnQuZmlyZSgpO00uX3NpbXBsZVJlbW92ZShkb2N1bWVudCwiRE9NQ29udGVudExv YWRlZCIsTS5fcmVhZHkpO319LF90cnlQcmVsb2FkQXR0YWNoOmZ1bmN0aW9uKCl7 aWYoRi5sZW5ndGg9PT0wKXtDPTA7aWYodGhpcy5faW50ZXJ2YWwpe2NsZWFySW50 ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO3RoaXMuX2ludGVydmFsPW51bGw7fXJldHVy bjt9aWYodGhpcy5sb2NrZWQpe3JldHVybjt9aWYodGhpcy5pc0lFKXtpZighdGhp cy5ET01SZWFkeSl7dGhpcy5zdGFydEludGVydmFsKCk7cmV0dXJuO319dGhpcy5s b2NrZWQ9dHJ1ZTt2YXIgUz0hSDtpZighUyl7Uz0oQz4wJiZGLmxlbmd0aD4wKTt9 dmFyIFI9W107dmFyIFQ9ZnVuY3Rpb24oVixXKXt2YXIgVT1WO2lmKFcub3ZlcnJp ZGVDb250ZXh0KXtpZihXLm92ZXJyaWRlQ29udGV4dD09PXRydWUpe1U9Vy5vYmo7 fWVsc2V7VT1XLm92ZXJyaWRlQ29udGV4dDt9fVcuZm4uY2FsbChVLFcub2JqKTt9 O3ZhciBOLE0sUSxQLE89W107Zm9yKE49MCxNPUYubGVuZ3RoO048TTtOPU4rMSl7 UT1GW05dO2lmKFEpe1A9dGhpcy5nZXRFbChRLmlkKTtpZihQKXtpZihRLmNoZWNr UmVhZHkpe2lmKEh8fFAubmV4dFNpYmxpbmd8fCFTKXtPLnB1c2goUSk7RltOXT1u dWxsO319ZWxzZXtUKFAsUSk7RltOXT1udWxsO319ZWxzZXtSLnB1c2goUSk7fX19 Zm9yKE49MCxNPU8ubGVuZ3RoO048TTtOPU4rMSl7UT1PW05dO1QodGhpcy5nZXRF bChRLmlkKSxRKTt9Qy0tO2lmKFMpe2ZvcihOPUYubGVuZ3RoLTE7Tj4tMTtOLS0p e1E9RltOXTtpZighUXx8IVEuaWQpe0Yuc3BsaWNlKE4sMSk7fX10aGlzLnN0YXJ0 SW50ZXJ2YWwoKTt9ZWxzZXtpZih0aGlzLl9pbnRlcnZhbCl7Y2xlYXJJbnRlcnZh bCh0aGlzLl9pbnRlcnZhbCk7dGhpcy5faW50ZXJ2YWw9bnVsbDt9fXRoaXMubG9j a2VkPWZhbHNlO30scHVyZ2VFbGVtZW50OmZ1bmN0aW9uKFEsUixUKXt2YXIgTz0o WUFIT08ubGFuZy5pc1N0cmluZyhRKSk/dGhpcy5nZXRFbChRKTpRO3ZhciBTPXRo aXMuZ2V0TGlzdGVuZXJzKE8sVCksUCxNO2lmKFMpe2ZvcihQPVMubGVuZ3RoLTE7 UD4tMTtQLS0pe3ZhciBOPVNbUF07dGhpcy5yZW1vdmVMaXN0ZW5lcihPLE4udHlw ZSxOLmZuKTt9fWlmKFImJk8mJk8uY2hpbGROb2Rlcyl7Zm9yKFA9MCxNPU8uY2hp bGROb2Rlcy5sZW5ndGg7UDxNOysrUCl7dGhpcy5wdXJnZUVsZW1lbnQoTy5jaGls ZE5vZGVzW1BdLFIsVCk7fX19LGdldExpc3RlbmVyczpmdW5jdGlvbihPLE0pe3Zh ciBSPVtdLE47aWYoIU0pe049W0ksSl07fWVsc2V7aWYoTT09PSJ1bmxvYWQiKXtO PVtKXTt9ZWxzZXtOPVtJXTt9fXZhciBUPShZQUhPTy5sYW5nLmlzU3RyaW5nKE8p KT90aGlzLmdldEVsKE8pOk87Zm9yKHZhciBRPTA7UTxOLmxlbmd0aDtRPVErMSl7 dmFyIFY9TltRXTtpZihWKXtmb3IodmFyIFM9MCxVPVYubGVuZ3RoO1M8VTsrK1Mp e3ZhciBQPVZbU107aWYoUCYmUFt0aGlzLkVMXT09PVQmJighTXx8TT09PVBbdGhp cy5UWVBFXSkpe1IucHVzaCh7dHlwZTpQW3RoaXMuVFlQRV0sZm46UFt0aGlzLkZO XSxvYmo6UFt0aGlzLk9CSl0sYWRqdXN0OlBbdGhpcy5PVkVSUklERV0sc2NvcGU6 UFt0aGlzLkFESl9TQ09QRV0saW5kZXg6U30pO319fX1yZXR1cm4oUi5sZW5ndGgp P1I6bnVsbDt9LF91bmxvYWQ6ZnVuY3Rpb24oVCl7dmFyIE49WUFIT08udXRpbC5F dmVudCxRLFAsTyxTLFIsVT1KLnNsaWNlKCksTTtmb3IoUT0wLFM9Si5sZW5ndGg7 UTxTOysrUSl7Tz1VW1FdO2lmKE8pe009d2luZG93O2lmKE9bTi5BREpfU0NPUEVd KXtpZihPW04uQURKX1NDT1BFXT09PXRydWUpe009T1tOLlVOTE9BRF9PQkpdO31l bHNle009T1tOLkFESl9TQ09QRV07fX1PW04uRk5dLmNhbGwoTSxOLmdldEV2ZW50 KFQsT1tOLkVMXSksT1tOLlVOTE9BRF9PQkpdKTtVW1FdPW51bGw7fX1PPW51bGw7 TT1udWxsO0o9bnVsbDtpZihJKXtmb3IoUD1JLmxlbmd0aC0xO1A+LTE7UC0tKXtP PUlbUF07aWYoTyl7Ti5yZW1vdmVMaXN0ZW5lcihPW04uRUxdLE9bTi5UWVBFXSxP W04uRk5dLFApO319Tz1udWxsO31HPW51bGw7Ti5fc2ltcGxlUmVtb3ZlKHdpbmRv dywidW5sb2FkIixOLl91bmxvYWQpO30sX2dldFNjcm9sbExlZnQ6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy5fZ2V0U2Nyb2xsKClbMV07fSxfZ2V0U2Nyb2xsVG9wOmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbCgpWzBdO30sX2dldFNjcm9s bDpmdW5jdGlvbigpe3ZhciBNPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxOPWRv Y3VtZW50LmJvZHk7aWYoTSYmKE0uc2Nyb2xsVG9wfHxNLnNjcm9sbExlZnQpKXty ZXR1cm5bTS5zY3JvbGxUb3AsTS5zY3JvbGxMZWZ0XTt9ZWxzZXtpZihOKXtyZXR1 cm5bTi5zY3JvbGxUb3AsTi5zY3JvbGxMZWZ0XTt9ZWxzZXtyZXR1cm5bMCwwXTt9 fX0scmVnQ0U6ZnVuY3Rpb24oKXt9LF9zaW1wbGVBZGQ6ZnVuY3Rpb24oKXtpZih3 aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil7cmV0dXJuIGZ1bmN0aW9uKE8sUCxOLE0p e08uYWRkRXZlbnRMaXN0ZW5lcihQLE4sKE0pKTt9O31lbHNle2lmKHdpbmRvdy5h dHRhY2hFdmVudCl7cmV0dXJuIGZ1bmN0aW9uKE8sUCxOLE0pe08uYXR0YWNoRXZl bnQoIm9uIitQLE4pO307fWVsc2V7cmV0dXJuIGZ1bmN0aW9uKCl7fTt9fX0oKSxf c2ltcGxlUmVtb3ZlOmZ1bmN0aW9uKCl7aWYod2luZG93LnJlbW92ZUV2ZW50TGlz dGVuZXIpe3JldHVybiBmdW5jdGlvbihPLFAsTixNKXtPLnJlbW92ZUV2ZW50TGlz dGVuZXIoUCxOLChNKSk7fTt9ZWxzZXtpZih3aW5kb3cuZGV0YWNoRXZlbnQpe3Jl dHVybiBmdW5jdGlvbihOLE8sTSl7Ti5kZXRhY2hFdmVudCgib24iK08sTSk7fTt9 ZWxzZXtyZXR1cm4gZnVuY3Rpb24oKXt9O319fSgpfTt9KCk7KGZ1bmN0aW9uKCl7 dmFyIEVVPVlBSE9PLnV0aWwuRXZlbnQ7RVUub249RVUuYWRkTGlzdGVuZXI7RVUu b25Gb2N1cz1FVS5hZGRGb2N1c0xpc3RlbmVyO0VVLm9uQmx1cj1FVS5hZGRCbHVy TGlzdGVuZXI7aWYoRVUuaXNJRSl7WUFIT08udXRpbC5FdmVudC5vbkRPTVJlYWR5 KFlBSE9PLnV0aWwuRXZlbnQuX3RyeVByZWxvYWRBdHRhY2gsWUFIT08udXRpbC5F dmVudCx0cnVlKTt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7RVUu X2RyaT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RyeXtuLmRvU2Nyb2xsKCJsZWZ0 Iik7Y2xlYXJJbnRlcnZhbChFVS5fZHJpKTtFVS5fZHJpPW51bGw7RVUuX3JlYWR5 KCk7bj1udWxsO31jYXRjaChleCl7fX0sRVUuUE9MTF9JTlRFUlZBTCk7fWVsc2V7 aWYoRVUud2Via2l0JiZFVS53ZWJraXQ8NTI1KXtFVS5fZHJpPXNldEludGVydmFs KGZ1bmN0aW9uKCl7dmFyIHJzPWRvY3VtZW50LnJlYWR5U3RhdGU7aWYoImxvYWRl ZCI9PXJzfHwiY29tcGxldGUiPT1ycyl7Y2xlYXJJbnRlcnZhbChFVS5fZHJpKTtF VS5fZHJpPW51bGw7RVUuX3JlYWR5KCk7fX0sRVUuUE9MTF9JTlRFUlZBTCk7fWVs c2V7RVUuX3NpbXBsZUFkZChkb2N1bWVudCwiRE9NQ29udGVudExvYWRlZCIsRVUu X3JlYWR5KTt9fUVVLl9zaW1wbGVBZGQod2luZG93LCJsb2FkIixFVS5fbG9hZCk7 RVUuX3NpbXBsZUFkZCh3aW5kb3csInVubG9hZCIsRVUuX3VubG9hZCk7RVUuX3Ry eVByZWxvYWRBdHRhY2goKTt9KSgpO31ZQUhPTy51dGlsLkV2ZW50UHJvdmlkZXI9 ZnVuY3Rpb24oKXt9O1lBSE9PLnV0aWwuRXZlbnRQcm92aWRlci5wcm90b3R5cGU9 e19feXVpX2V2ZW50czpudWxsLF9feXVpX3N1YnNjcmliZXJzOm51bGwsc3Vic2Ny aWJlOmZ1bmN0aW9uKEEsQyxGLEUpe3RoaXMuX195dWlfZXZlbnRzPXRoaXMuX195 dWlfZXZlbnRzfHx7fTt2YXIgRD10aGlzLl9feXVpX2V2ZW50c1tBXTtpZihEKXtE LnN1YnNjcmliZShDLEYsRSk7fWVsc2V7dGhpcy5fX3l1aV9zdWJzY3JpYmVycz10 aGlzLl9feXVpX3N1YnNjcmliZXJzfHx7fTt2YXIgQj10aGlzLl9feXVpX3N1YnNj cmliZXJzO2lmKCFCW0FdKXtCW0FdPVtdO31CW0FdLnB1c2goe2ZuOkMsb2JqOkYs b3ZlcnJpZGVDb250ZXh0OkV9KTt9fSx1bnN1YnNjcmliZTpmdW5jdGlvbihDLEUs Ryl7dGhpcy5fX3l1aV9ldmVudHM9dGhpcy5fX3l1aV9ldmVudHN8fHt9O3ZhciBB PXRoaXMuX195dWlfZXZlbnRzO2lmKEMpe3ZhciBGPUFbQ107aWYoRil7cmV0dXJu IEYudW5zdWJzY3JpYmUoRSxHKTt9fWVsc2V7dmFyIEI9dHJ1ZTtmb3IodmFyIEQg aW4gQSl7aWYoWUFIT08ubGFuZy5oYXNPd25Qcm9wZXJ0eShBLEQpKXtCPUImJkFb RF0udW5zdWJzY3JpYmUoRSxHKTt9fXJldHVybiBCO31yZXR1cm4gZmFsc2U7fSx1 bnN1YnNjcmliZUFsbDpmdW5jdGlvbihBKXtyZXR1cm4gdGhpcy51bnN1YnNjcmli ZShBKTt9LGNyZWF0ZUV2ZW50OmZ1bmN0aW9uKEcsRCl7dGhpcy5fX3l1aV9ldmVu dHM9dGhpcy5fX3l1aV9ldmVudHN8fHt9O3ZhciBBPUR8fHt9O3ZhciBJPXRoaXMu X195dWlfZXZlbnRzO2lmKElbR10pe31lbHNle3ZhciBIPUEuc2NvcGV8fHRoaXM7 dmFyIEU9KEEuc2lsZW50KTt2YXIgQj1uZXcgWUFIT08udXRpbC5DdXN0b21FdmVu dChHLEgsRSxZQUhPTy51dGlsLkN1c3RvbUV2ZW50LkZMQVQpO0lbR109QjtpZihB Lm9uU3Vic2NyaWJlQ2FsbGJhY2spe0Iuc3Vic2NyaWJlRXZlbnQuc3Vic2NyaWJl KEEub25TdWJzY3JpYmVDYWxsYmFjayk7fXRoaXMuX195dWlfc3Vic2NyaWJlcnM9 dGhpcy5fX3l1aV9zdWJzY3JpYmVyc3x8e307dmFyIEY9dGhpcy5fX3l1aV9zdWJz Y3JpYmVyc1tHXTtpZihGKXtmb3IodmFyIEM9MDtDPEYubGVuZ3RoOysrQyl7Qi5z dWJzY3JpYmUoRltDXS5mbixGW0NdLm9iaixGW0NdLm92ZXJyaWRlQ29udGV4dCk7 fX19cmV0dXJuIElbR107fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oRSxELEEsQyl7dGhp cy5fX3l1aV9ldmVudHM9dGhpcy5fX3l1aV9ldmVudHN8fHt9O3ZhciBHPXRoaXMu X195dWlfZXZlbnRzW0VdO2lmKCFHKXtyZXR1cm4gbnVsbDt9dmFyIEI9W107Zm9y KHZhciBGPTE7Rjxhcmd1bWVudHMubGVuZ3RoOysrRil7Qi5wdXNoKGFyZ3VtZW50 c1tGXSk7fXJldHVybiBHLmZpcmUuYXBwbHkoRyxCKTt9LGhhc0V2ZW50OmZ1bmN0 aW9uKEEpe2lmKHRoaXMuX195dWlfZXZlbnRzKXtpZih0aGlzLl9feXVpX2V2ZW50 c1tBXSl7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fX07KGZ1bmN0aW9uKCl7 dmFyIEE9WUFIT08udXRpbC5FdmVudCxDPVlBSE9PLmxhbmc7WUFIT08udXRpbC5L ZXlMaXN0ZW5lcj1mdW5jdGlvbihELEksRSxGKXtpZighRCl7fWVsc2V7aWYoIUkp e31lbHNle2lmKCFFKXt9fX1pZighRil7Rj1ZQUhPTy51dGlsLktleUxpc3RlbmVy LktFWURPV047fXZhciBHPW5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJrZXlQ cmVzc2VkIik7dGhpcy5lbmFibGVkRXZlbnQ9bmV3IFlBSE9PLnV0aWwuQ3VzdG9t RXZlbnQoImVuYWJsZWQiKTt0aGlzLmRpc2FibGVkRXZlbnQ9bmV3IFlBSE9PLnV0 aWwuQ3VzdG9tRXZlbnQoImRpc2FibGVkIik7aWYoQy5pc1N0cmluZyhEKSl7RD1k b2N1bWVudC5nZXRFbGVtZW50QnlJZChEKTt9aWYoQy5pc0Z1bmN0aW9uKEUpKXtH LnN1YnNjcmliZShFKTt9ZWxzZXtHLnN1YnNjcmliZShFLmZuLEUuc2NvcGUsRS5j b3JyZWN0U2NvcGUpO31mdW5jdGlvbiBIKE8sTil7aWYoIUkuc2hpZnQpe0kuc2hp ZnQ9ZmFsc2U7fWlmKCFJLmFsdCl7SS5hbHQ9ZmFsc2U7fWlmKCFJLmN0cmwpe0ku Y3RybD1mYWxzZTt9aWYoTy5zaGlmdEtleT09SS5zaGlmdCYmTy5hbHRLZXk9PUku YWx0JiZPLmN0cmxLZXk9PUkuY3RybCl7dmFyIEosTT1JLmtleXMsTDtpZihZQUhP Ty5sYW5nLmlzQXJyYXkoTSkpe2Zvcih2YXIgSz0wO0s8TS5sZW5ndGg7SysrKXtK PU1bS107TD1BLmdldENoYXJDb2RlKE8pO2lmKEo9PUwpe0cuZmlyZShMLE8pO2Jy ZWFrO319fWVsc2V7TD1BLmdldENoYXJDb2RlKE8pO2lmKE09PUwpe0cuZmlyZShM LE8pO319fX10aGlzLmVuYWJsZT1mdW5jdGlvbigpe2lmKCF0aGlzLmVuYWJsZWQp e0Eub24oRCxGLEgpO3RoaXMuZW5hYmxlZEV2ZW50LmZpcmUoSSk7fXRoaXMuZW5h YmxlZD10cnVlO307dGhpcy5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5lbmFi bGVkKXtBLnJlbW92ZUxpc3RlbmVyKEQsRixIKTt0aGlzLmRpc2FibGVkRXZlbnQu ZmlyZShJKTt9dGhpcy5lbmFibGVkPWZhbHNlO307dGhpcy50b1N0cmluZz1mdW5j dGlvbigpe3JldHVybiJLZXlMaXN0ZW5lciBbIitJLmtleXMrIl0gIitELnRhZ05h bWUrKEQuaWQ/IlsiK0QuaWQrIl0iOiIiKTt9O307dmFyIEI9WUFIT08udXRpbC5L ZXlMaXN0ZW5lcjtCLktFWURPV049ImtleWRvd24iO0IuS0VZVVA9ImtleXVwIjtC LktFWT17QUxUOjE4LEJBQ0tfU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09OVFJPTDox NyxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhP TUU6MzYsTEVGVDozNyxNRVRBOjIyNCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0 LFBBR0VfVVA6MzMsUEFVU0U6MTksUFJJTlRTQ1JFRU46NDQsUklHSFQ6MzksU0NS T0xMX0xPQ0s6MTQ1LFNISUZUOjE2LFNQQUNFOjMyLFRBQjo5LFVQOjM4fTt9KSgp O1lBSE9PLnJlZ2lzdGVyKCJldmVudCIsWUFIT08udXRpbC5FdmVudCx7dmVyc2lv bjoiMi43LjAiLGJ1aWxkOiIxNzk5In0pO1lBSE9PLnJlZ2lzdGVyKCJ5YWhvby1k b20tZXZlbnQiLFlBSE9PLHt2ZXJzaW9uOiIyLjcuMCIsYnVpbGQ6IjE3OTkifSk7 WUFIT08udXRpbC5IaXN0b3J5PShmdW5jdGlvbigpe3ZhciBDPW51bGw7dmFyIEs9 bnVsbDt2YXIgRj1mYWxzZTt2YXIgRD1bXTt2YXIgQj1bXTtmdW5jdGlvbiBJKCl7 dmFyIE0sTDtMPXRvcC5sb2NhdGlvbi5ocmVmO009TC5pbmRleE9mKCIjIik7cmV0 dXJuIE0+PTA/TC5zdWJzdHIoTSsxKTpudWxsO31mdW5jdGlvbiBBKCl7dmFyIE0s TixPPVtdLEw9W107Zm9yKE0gaW4gRCl7aWYoWUFIT08ubGFuZy5oYXNPd25Qcm9w ZXJ0eShELE0pKXtOPURbTV07Ty5wdXNoKE0rIj0iK04uaW5pdGlhbFN0YXRlKTtM LnB1c2goTSsiPSIrTi5jdXJyZW50U3RhdGUpO319Sy52YWx1ZT1PLmpvaW4oIiYi KSsifCIrTC5qb2luKCImIik7aWYoWUFIT08uZW52LnVhLndlYmtpdCl7Sy52YWx1 ZSs9InwiK0Iuam9pbigiLCIpO319ZnVuY3Rpb24gSChMKXt2YXIgUSxSLE0sTyxQ LFQsUyxOO2lmKCFMKXtmb3IoTSBpbiBEKXtpZihZQUhPTy5sYW5nLmhhc093blBy b3BlcnR5KEQsTSkpe089RFtNXTtPLmN1cnJlbnRTdGF0ZT1PLmluaXRpYWxTdGF0 ZTtPLm9uU3RhdGVDaGFuZ2UodW5lc2NhcGUoTy5jdXJyZW50U3RhdGUpKTt9fXJl dHVybjt9UD1bXTtUPUwuc3BsaXQoIiYiKTtmb3IoUT0wLFI9VC5sZW5ndGg7UTxS O1ErKyl7Uz1UW1FdLnNwbGl0KCI9Iik7aWYoUy5sZW5ndGg9PT0yKXtNPVNbMF07 Tj1TWzFdO1BbTV09Tjt9fWZvcihNIGluIEQpe2lmKFlBSE9PLmxhbmcuaGFzT3du UHJvcGVydHkoRCxNKSl7Tz1EW01dO049UFtNXTtpZighTnx8Ty5jdXJyZW50U3Rh dGUhPT1OKXtPLmN1cnJlbnRTdGF0ZT1OfHxPLmluaXRpYWxTdGF0ZTtPLm9uU3Rh dGVDaGFuZ2UodW5lc2NhcGUoTy5jdXJyZW50U3RhdGUpKTt9fX19ZnVuY3Rpb24g SihPKXt2YXIgTCxOO0w9JzxodG1sPjxib2R5PjxkaXYgaWQ9InN0YXRlIj4nK08r IjwvZGl2PjwvYm9keT48L2h0bWw+Ijt0cnl7Tj1DLmNvbnRlbnRXaW5kb3cuZG9j dW1lbnQ7Ti5vcGVuKCk7Ti53cml0ZShMKTtOLmNsb3NlKCk7cmV0dXJuIHRydWU7 fWNhdGNoKE0pe3JldHVybiBmYWxzZTt9fWZ1bmN0aW9uIEcoKXt2YXIgTyxMLE4s TTtpZighQy5jb250ZW50V2luZG93fHwhQy5jb250ZW50V2luZG93LmRvY3VtZW50 KXtzZXRUaW1lb3V0KEcsMTApO3JldHVybjt9Tz1DLmNvbnRlbnRXaW5kb3cuZG9j dW1lbnQ7TD1PLmdldEVsZW1lbnRCeUlkKCJzdGF0ZSIpO049TD9MLmlubmVyVGV4 dDpudWxsO009SSgpO3NldEludGVydmFsKGZ1bmN0aW9uKCl7dmFyIFUsUSxSLFMs VCxQO089Qy5jb250ZW50V2luZG93LmRvY3VtZW50O0w9Ty5nZXRFbGVtZW50QnlJ ZCgic3RhdGUiKTtVPUw/TC5pbm5lclRleHQ6bnVsbDtUPUkoKTtpZihVIT09Til7 Tj1VO0goTik7aWYoIU4pe1E9W107Zm9yKFIgaW4gRCl7aWYoWUFIT08ubGFuZy5o YXNPd25Qcm9wZXJ0eShELFIpKXtTPURbUl07US5wdXNoKFIrIj0iK1MuaW5pdGlh bFN0YXRlKTt9fVQ9US5qb2luKCImIik7fWVsc2V7VD1OO310b3AubG9jYXRpb24u aGFzaD1UO009VDtBKCk7fWVsc2V7aWYoVCE9PU0pe009VDtKKFQpO319fSw1MCk7 Rj10cnVlO1lBSE9PLnV0aWwuSGlzdG9yeS5vbkxvYWRFdmVudC5maXJlKCk7fWZ1 bmN0aW9uIEUoKXt2YXIgUyxVLFEsVyxNLE8sVixQLFQsTixMLFI7UT1LLnZhbHVl LnNwbGl0KCJ8Iik7aWYoUS5sZW5ndGg+MSl7Vj1RWzBdLnNwbGl0KCImIik7Zm9y KFM9MCxVPVYubGVuZ3RoO1M8VTtTKyspe1c9VltTXS5zcGxpdCgiPSIpO2lmKFcu bGVuZ3RoPT09Mil7TT1XWzBdO1A9V1sxXTtPPURbTV07aWYoTyl7Ty5pbml0aWFs U3RhdGU9UDt9fX1UPVFbMV0uc3BsaXQoIiYiKTtmb3IoUz0wLFU9VC5sZW5ndGg7 UzxVO1MrKyl7Vz1UW1NdLnNwbGl0KCI9Iik7aWYoVy5sZW5ndGg+PTIpe009V1sw XTtOPVdbMV07Tz1EW01dO2lmKE8pe08uY3VycmVudFN0YXRlPU47fX19fWlmKFEu bGVuZ3RoPjIpe0I9UVsyXS5zcGxpdCgiLCIpO31pZihZQUhPTy5lbnYudWEuaWUp e2lmKHR5cGVvZiBkb2N1bWVudC5kb2N1bWVudE1vZGU9PT0idW5kZWZpbmVkInx8 ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDgpe0coKTt9ZWxzZXtZQUhPTy51dGlsLkV2 ZW50Lm9uKHRvcCwiaGFzaGNoYW5nZSIsZnVuY3Rpb24oKXt2YXIgWD1JKCk7SChY KTtBKCk7fSk7Rj10cnVlO1lBSE9PLnV0aWwuSGlzdG9yeS5vbkxvYWRFdmVudC5m aXJlKCk7fX1lbHNle0w9aGlzdG9yeS5sZW5ndGg7Uj1JKCk7c2V0SW50ZXJ2YWwo ZnVuY3Rpb24oKXt2YXIgWixYLFk7WD1JKCk7WT1oaXN0b3J5Lmxlbmd0aDtpZihY IT09Uil7Uj1YO0w9WTtIKFIpO0EoKTt9ZWxzZXtpZihZIT09TCYmWUFIT08uZW52 LnVhLndlYmtpdCl7Uj1YO0w9WTtaPUJbTC0xXTtIKFopO0EoKTt9fX0sNTApO0Y9 dHJ1ZTtZQUhPTy51dGlsLkhpc3Rvcnkub25Mb2FkRXZlbnQuZmlyZSgpO319cmV0 dXJue29uTG9hZEV2ZW50Om5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJvbkxv YWQiKSxvblJlYWR5OmZ1bmN0aW9uKE0sTixMKXtpZihGKXtzZXRUaW1lb3V0KGZ1 bmN0aW9uKCl7dmFyIE89d2luZG93O2lmKEwpe2lmKEw9PT10cnVlKXtPPU47fWVs c2V7Tz1MO319TS5jYWxsKE8sIm9uTG9hZCIsW10sTik7fSwwKTt9ZWxzZXtZQUhP Ty51dGlsLkhpc3Rvcnkub25Mb2FkRXZlbnQuc3Vic2NyaWJlKE0sTixMKTt9fSxy ZWdpc3RlcjpmdW5jdGlvbihPLEwsUSxSLE4pe3ZhciBQLE07aWYodHlwZW9mIE8h PT0ic3RyaW5nInx8WUFIT08ubGFuZy50cmltKE8pPT09IiJ8fHR5cGVvZiBMIT09 InN0cmluZyJ8fHR5cGVvZiBRIT09ImZ1bmN0aW9uIil7dGhyb3cgbmV3IEVycm9y KCJNaXNzaW5nIG9yIGludmFsaWQgYXJndW1lbnQiKTt9aWYoRFtPXSl7cmV0dXJu O31pZihGKXt0aHJvdyBuZXcgRXJyb3IoIkFsbCBtb2R1bGVzIG11c3QgYmUgcmVn aXN0ZXJlZCBiZWZvcmUgY2FsbGluZyBZQUhPTy51dGlsLkhpc3RvcnkuaW5pdGlh bGl6ZSIpO31PPWVzY2FwZShPKTtMPWVzY2FwZShMKTtQPW51bGw7aWYoTj09PXRy dWUpe1A9Ujt9ZWxzZXtQPU47fU09ZnVuY3Rpb24oUyl7cmV0dXJuIFEuY2FsbChQ LFMsUik7fTtEW09dPXtuYW1lOk8saW5pdGlhbFN0YXRlOkwsY3VycmVudFN0YXRl Okwsb25TdGF0ZUNoYW5nZTpNfTt9LGluaXRpYWxpemU6ZnVuY3Rpb24oTCxNKXtp ZihGKXtyZXR1cm47fWlmKFlBSE9PLmVudi51YS5vcGVyYSYmdHlwZW9mIGhpc3Rv cnkubmF2aWdhdGlvbk1vZGUhPT0idW5kZWZpbmVkIil7aGlzdG9yeS5uYXZpZ2F0 aW9uTW9kZT0iY29tcGF0aWJsZSI7fWlmKHR5cGVvZiBMPT09InN0cmluZyIpe0w9 ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTCk7fWlmKCFMfHxMLnRhZ05hbWUudG9V cHBlckNhc2UoKSE9PSJURVhUQVJFQSImJihMLnRhZ05hbWUudG9VcHBlckNhc2Uo KSE9PSJJTlBVVCJ8fEwudHlwZSE9PSJoaWRkZW4iJiZMLnR5cGUhPT0idGV4dCIp KXt0aHJvdyBuZXcgRXJyb3IoIk1pc3Npbmcgb3IgaW52YWxpZCBhcmd1bWVudCIp O31LPUw7aWYoWUFIT08uZW52LnVhLmllJiYodHlwZW9mIGRvY3VtZW50LmRvY3Vt ZW50TW9kZT09PSJ1bmRlZmluZWQifHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OCkp e2lmKHR5cGVvZiBNPT09InN0cmluZyIpe009ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoTSk7fWlmKCFNfHxNLnRhZ05hbWUudG9VcHBlckNhc2UoKSE9PSJJRlJBTUUi KXt0aHJvdyBuZXcgRXJyb3IoIk1pc3Npbmcgb3IgaW52YWxpZCBhcmd1bWVudCIp O31DPU07fVlBSE9PLnV0aWwuRXZlbnQub25ET01SZWFkeShFKTt9LG5hdmlnYXRl OmZ1bmN0aW9uKE0sTil7dmFyIEw7aWYodHlwZW9mIE0hPT0ic3RyaW5nInx8dHlw ZW9mIE4hPT0ic3RyaW5nIil7dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIG9yIGlu dmFsaWQgYXJndW1lbnQiKTt9TD17fTtMW01dPU47cmV0dXJuIFlBSE9PLnV0aWwu SGlzdG9yeS5tdWx0aU5hdmlnYXRlKEwpO30sbXVsdGlOYXZpZ2F0ZTpmdW5jdGlv bihNKXt2YXIgTCxOLFAsTyxRO2lmKHR5cGVvZiBNIT09Im9iamVjdCIpe3Rocm93 IG5ldyBFcnJvcigiTWlzc2luZyBvciBpbnZhbGlkIGFyZ3VtZW50Iik7fWlmKCFG KXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBCcm93c2VyIEhpc3RvcnkgTWFuYWdlciBp cyBub3QgaW5pdGlhbGl6ZWQiKTt9Zm9yKE4gaW4gTSl7aWYoIURbTl0pe3Rocm93 IG5ldyBFcnJvcigiVGhlIGZvbGxvd2luZyBtb2R1bGUgaGFzIG5vdCBiZWVuIHJl Z2lzdGVyZWQ6ICIrTik7fX1MPVtdO2ZvcihOIGluIEQpe2lmKFlBSE9PLmxhbmcu aGFzT3duUHJvcGVydHkoRCxOKSl7UD1EW05dO2lmKFlBSE9PLmxhbmcuaGFzT3du UHJvcGVydHkoTSxOKSl7Tz1NW3VuZXNjYXBlKE4pXTt9ZWxzZXtPPXVuZXNjYXBl KFAuY3VycmVudFN0YXRlKTt9Tj1lc2NhcGUoTik7Tz1lc2NhcGUoTyk7TC5wdXNo KE4rIj0iK08pO319UT1MLmpvaW4oIiYiKTtpZihZQUhPTy5lbnYudWEuaWUmJih0 eXBlb2YgZG9jdW1lbnQuZG9jdW1lbnRNb2RlPT09InVuZGVmaW5lZCJ8fGRvY3Vt ZW50LmRvY3VtZW50TW9kZTw4KSl7cmV0dXJuIEooUSk7fWVsc2V7dG9wLmxvY2F0 aW9uLmhhc2g9UTtpZihZQUhPTy5lbnYudWEud2Via2l0KXtCW2hpc3RvcnkubGVu Z3RoXT1RO0EoKTt9cmV0dXJuIHRydWU7fX0sZ2V0Q3VycmVudFN0YXRlOmZ1bmN0 aW9uKEwpe3ZhciBNO2lmKHR5cGVvZiBMIT09InN0cmluZyIpe3Rocm93IG5ldyBF cnJvcigiTWlzc2luZyBvciBpbnZhbGlkIGFyZ3VtZW50Iik7fWlmKCFGKXt0aHJv dyBuZXcgRXJyb3IoIlRoZSBCcm93c2VyIEhpc3RvcnkgTWFuYWdlciBpcyBub3Qg aW5pdGlhbGl6ZWQiKTt9TT1EW0xdO2lmKCFNKXt0aHJvdyBuZXcgRXJyb3IoIk5v IHN1Y2ggcmVnaXN0ZXJlZCBtb2R1bGU6ICIrTCk7fXJldHVybiB1bmVzY2FwZShN LmN1cnJlbnRTdGF0ZSk7fSxnZXRCb29rbWFya2VkU3RhdGU6ZnVuY3Rpb24oUSl7 dmFyIFAsTSxMLFMsTixSLE87aWYodHlwZW9mIFEhPT0ic3RyaW5nIil7dGhyb3cg bmV3IEVycm9yKCJNaXNzaW5nIG9yIGludmFsaWQgYXJndW1lbnQiKTt9TD10b3Au bG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIik7aWYoTD49MCl7Uz10b3AubG9jYXRp b24uaHJlZi5zdWJzdHIoTCsxKTtOPVMuc3BsaXQoIiYiKTtmb3IoUD0wLE09Ti5s ZW5ndGg7UDxNO1ArKyl7Uj1OW1BdLnNwbGl0KCI9Iik7aWYoUi5sZW5ndGg9PT0y KXtPPVJbMF07aWYoTz09PVEpe3JldHVybiB1bmVzY2FwZShSWzFdKTt9fX19cmV0 dXJuIG51bGw7fSxnZXRRdWVyeVN0cmluZ1BhcmFtZXRlcjpmdW5jdGlvbihRLE4p e3ZhciBPLE0sTCxTLFIsUDtOPU58fHRvcC5sb2NhdGlvbi5ocmVmO0w9Ti5pbmRl eE9mKCI/Iik7Uz1MPj0wP04uc3Vic3RyKEwrMSk6TjtMPVMubGFzdEluZGV4T2Yo IiMiKTtTPUw+PTA/Uy5zdWJzdHIoMCxMKTpTO1I9Uy5zcGxpdCgiJiIpO2ZvcihP PTAsTT1SLmxlbmd0aDtPPE07TysrKXtQPVJbT10uc3BsaXQoIj0iKTtpZihQLmxl bmd0aD49Mil7aWYoUFswXT09PVEpe3JldHVybiB1bmVzY2FwZShQWzFdKTt9fX1y ZXR1cm4gbnVsbDt9fTt9KSgpO1lBSE9PLnJlZ2lzdGVyKCJoaXN0b3J5IixZQUhP Ty51dGlsLkhpc3Rvcnkse3ZlcnNpb246IjIuNy4wIixidWlsZDoiMTc5OSJ9KTtZ QUhPTy51dGlsLkNvbm5lY3Q9e19tc3htbF9wcm9naWQ6WyJNaWNyb3NvZnQuWE1M SFRUUCIsIk1TWE1MMi5YTUxIVFRQLjMuMCIsIk1TWE1MMi5YTUxIVFRQIl0sX2h0 dHBfaGVhZGVyczp7fSxfaGFzX2h0dHBfaGVhZGVyczpmYWxzZSxfdXNlX2RlZmF1 bHRfcG9zdF9oZWFkZXI6dHJ1ZSxfZGVmYXVsdF9wb3N0X2hlYWRlcjoiYXBwbGlj YXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixfZGVm YXVsdF9mb3JtX2hlYWRlcjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv ZGVkIixfdXNlX2RlZmF1bHRfeGhyX2hlYWRlcjp0cnVlLF9kZWZhdWx0X3hocl9o ZWFkZXI6IlhNTEh0dHBSZXF1ZXN0IixfaGFzX2RlZmF1bHRfaGVhZGVyczp0cnVl LF9kZWZhdWx0X2hlYWRlcnM6e30sX2lzRm9ybVN1Ym1pdDpmYWxzZSxfaXNGaWxl VXBsb2FkOmZhbHNlLF9mb3JtTm9kZTpudWxsLF9zRm9ybURhdGE6bnVsbCxfcG9s bDp7fSxfdGltZU91dDp7fSxfcG9sbGluZ19pbnRlcnZhbDo1MCxfdHJhbnNhY3Rp b25faWQ6MCxfc3VibWl0RWxlbWVudFZhbHVlOm51bGwsX2hhc1N1Ym1pdExpc3Rl bmVyOihmdW5jdGlvbigpe2lmKFlBSE9PLnV0aWwuRXZlbnQpe1lBSE9PLnV0aWwu RXZlbnQuYWRkTGlzdGVuZXIoZG9jdW1lbnQsImNsaWNrIixmdW5jdGlvbihDKXt2 YXIgQj1ZQUhPTy51dGlsLkV2ZW50LmdldFRhcmdldChDKSxBPUIubm9kZU5hbWUu dG9Mb3dlckNhc2UoKTtpZigoQT09PSJpbnB1dCJ8fEE9PT0iYnV0dG9uIikmJihC LnR5cGUmJkIudHlwZS50b0xvd2VyQ2FzZSgpPT0ic3VibWl0Iikpe1lBSE9PLnV0 aWwuQ29ubmVjdC5fc3VibWl0RWxlbWVudFZhbHVlPWVuY29kZVVSSUNvbXBvbmVu dChCLm5hbWUpKyI9IitlbmNvZGVVUklDb21wb25lbnQoQi52YWx1ZSk7fX0pO3Jl dHVybiB0cnVlO31yZXR1cm4gZmFsc2U7fSkoKSxzdGFydEV2ZW50Om5ldyBZQUhP Ty51dGlsLkN1c3RvbUV2ZW50KCJzdGFydCIpLGNvbXBsZXRlRXZlbnQ6bmV3IFlB SE9PLnV0aWwuQ3VzdG9tRXZlbnQoImNvbXBsZXRlIiksc3VjY2Vzc0V2ZW50Om5l dyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJzdWNjZXNzIiksZmFpbHVyZUV2ZW50 Om5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJmYWlsdXJlIiksdXBsb2FkRXZl bnQ6bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoInVwbG9hZCIpLGFib3J0RXZl bnQ6bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoImFib3J0IiksX2N1c3RvbUV2 ZW50czp7b25TdGFydDpbInN0YXJ0RXZlbnQiLCJzdGFydCJdLG9uQ29tcGxldGU6 WyJjb21wbGV0ZUV2ZW50IiwiY29tcGxldGUiXSxvblN1Y2Nlc3M6WyJzdWNjZXNz RXZlbnQiLCJzdWNjZXNzIl0sb25GYWlsdXJlOlsiZmFpbHVyZUV2ZW50IiwiZmFp bHVyZSJdLG9uVXBsb2FkOlsidXBsb2FkRXZlbnQiLCJ1cGxvYWQiXSxvbkFib3J0 OlsiYWJvcnRFdmVudCIsImFib3J0Il19LHNldFByb2dJZDpmdW5jdGlvbihBKXt0 aGlzLl9tc3htbF9wcm9naWQudW5zaGlmdChBKTt9LHNldERlZmF1bHRQb3N0SGVh ZGVyOmZ1bmN0aW9uKEEpe2lmKHR5cGVvZiBBPT0ic3RyaW5nIil7dGhpcy5fZGVm YXVsdF9wb3N0X2hlYWRlcj1BO31lbHNle2lmKHR5cGVvZiBBPT0iYm9vbGVhbiIp e3RoaXMuX3VzZV9kZWZhdWx0X3Bvc3RfaGVhZGVyPUE7fX19LHNldERlZmF1bHRY aHJIZWFkZXI6ZnVuY3Rpb24oQSl7aWYodHlwZW9mIEE9PSJzdHJpbmciKXt0aGlz Ll9kZWZhdWx0X3hocl9oZWFkZXI9QTt9ZWxzZXt0aGlzLl91c2VfZGVmYXVsdF94 aHJfaGVhZGVyPUE7fX0sc2V0UG9sbGluZ0ludGVydmFsOmZ1bmN0aW9uKEEpe2lm KHR5cGVvZiBBPT0ibnVtYmVyIiYmaXNGaW5pdGUoQSkpe3RoaXMuX3BvbGxpbmdf aW50ZXJ2YWw9QTt9fSxjcmVhdGVYaHJPYmplY3Q6ZnVuY3Rpb24oRil7dmFyIEUs QTt0cnl7QT1uZXcgWE1MSHR0cFJlcXVlc3QoKTtFPXtjb25uOkEsdElkOkZ9O31j YXRjaChEKXtmb3IodmFyIEI9MDtCPHRoaXMuX21zeG1sX3Byb2dpZC5sZW5ndGg7 KytCKXt0cnl7QT1uZXcgQWN0aXZlWE9iamVjdCh0aGlzLl9tc3htbF9wcm9naWRb Ql0pO0U9e2Nvbm46QSx0SWQ6Rn07YnJlYWs7fWNhdGNoKEMpe319fWZpbmFsbHl7 cmV0dXJuIEU7fX0sZ2V0Q29ubmVjdGlvbk9iamVjdDpmdW5jdGlvbihBKXt2YXIg Qzt2YXIgRD10aGlzLl90cmFuc2FjdGlvbl9pZDt0cnl7aWYoIUEpe0M9dGhpcy5j cmVhdGVYaHJPYmplY3QoRCk7fWVsc2V7Qz17fTtDLnRJZD1EO0MuaXNVcGxvYWQ9 dHJ1ZTt9aWYoQyl7dGhpcy5fdHJhbnNhY3Rpb25faWQrKzt9fWNhdGNoKEIpe31m aW5hbGx5e3JldHVybiBDO319LGFzeW5jUmVxdWVzdDpmdW5jdGlvbihGLEMsRSxB KXt2YXIgRD0odGhpcy5faXNGaWxlVXBsb2FkKT90aGlzLmdldENvbm5lY3Rpb25P YmplY3QodHJ1ZSk6dGhpcy5nZXRDb25uZWN0aW9uT2JqZWN0KCk7dmFyIEI9KEUm JkUuYXJndW1lbnQpP0UuYXJndW1lbnQ6bnVsbDtpZighRCl7cmV0dXJuIG51bGw7 fWVsc2V7aWYoRSYmRS5jdXN0b21ldmVudHMpe3RoaXMuaW5pdEN1c3RvbUV2ZW50 cyhELEUpO31pZih0aGlzLl9pc0Zvcm1TdWJtaXQpe2lmKHRoaXMuX2lzRmlsZVVw bG9hZCl7dGhpcy51cGxvYWRGaWxlKEQsRSxDLEEpO3JldHVybiBEO31pZihGLnRv VXBwZXJDYXNlKCk9PSJHRVQiKXtpZih0aGlzLl9zRm9ybURhdGEubGVuZ3RoIT09 MCl7Qys9KChDLmluZGV4T2YoIj8iKT09LTEpPyI/IjoiJiIpK3RoaXMuX3NGb3Jt RGF0YTt9fWVsc2V7aWYoRi50b1VwcGVyQ2FzZSgpPT0iUE9TVCIpe0E9QT90aGlz Ll9zRm9ybURhdGErIiYiK0E6dGhpcy5fc0Zvcm1EYXRhO319fWlmKEYudG9VcHBl ckNhc2UoKT09IkdFVCImJihFJiZFLmNhY2hlPT09ZmFsc2UpKXtDKz0oKEMuaW5k ZXhPZigiPyIpPT0tMSk/Ij8iOiImIikrInJuZD0iK25ldyBEYXRlKCkudmFsdWVP ZigpLnRvU3RyaW5nKCk7fUQuY29ubi5vcGVuKEYsQyx0cnVlKTtpZih0aGlzLl91 c2VfZGVmYXVsdF94aHJfaGVhZGVyKXtpZighdGhpcy5fZGVmYXVsdF9oZWFkZXJz WyJYLVJlcXVlc3RlZC1XaXRoIl0pe3RoaXMuaW5pdEhlYWRlcigiWC1SZXF1ZXN0 ZWQtV2l0aCIsdGhpcy5fZGVmYXVsdF94aHJfaGVhZGVyLHRydWUpO319aWYoKEYu dG9VcHBlckNhc2UoKT09PSJQT1NUIiYmdGhpcy5fdXNlX2RlZmF1bHRfcG9zdF9o ZWFkZXIpJiZ0aGlzLl9pc0Zvcm1TdWJtaXQ9PT1mYWxzZSl7dGhpcy5pbml0SGVh ZGVyKCJDb250ZW50LVR5cGUiLHRoaXMuX2RlZmF1bHRfcG9zdF9oZWFkZXIpO31p Zih0aGlzLl9oYXNfZGVmYXVsdF9oZWFkZXJzfHx0aGlzLl9oYXNfaHR0cF9oZWFk ZXJzKXt0aGlzLnNldEhlYWRlcihEKTt9dGhpcy5oYW5kbGVSZWFkeVN0YXRlKEQs RSk7RC5jb25uLnNlbmQoQXx8IiIpO2lmKHRoaXMuX2lzRm9ybVN1Ym1pdD09PXRy dWUpe3RoaXMucmVzZXRGb3JtU3RhdGUoKTt9dGhpcy5zdGFydEV2ZW50LmZpcmUo RCxCKTtpZihELnN0YXJ0RXZlbnQpe0Quc3RhcnRFdmVudC5maXJlKEQsQik7fXJl dHVybiBEO319LGluaXRDdXN0b21FdmVudHM6ZnVuY3Rpb24oQSxDKXt2YXIgQjtm b3IoQiBpbiBDLmN1c3RvbWV2ZW50cyl7aWYodGhpcy5fY3VzdG9tRXZlbnRzW0Jd WzBdKXtBW3RoaXMuX2N1c3RvbUV2ZW50c1tCXVswXV09bmV3IFlBSE9PLnV0aWwu Q3VzdG9tRXZlbnQodGhpcy5fY3VzdG9tRXZlbnRzW0JdWzFdLChDLnNjb3BlKT9D LnNjb3BlOm51bGwpO0FbdGhpcy5fY3VzdG9tRXZlbnRzW0JdWzBdXS5zdWJzY3Jp YmUoQy5jdXN0b21ldmVudHNbQl0pO319fSxoYW5kbGVSZWFkeVN0YXRlOmZ1bmN0 aW9uKEMsRCl7dmFyIEI9dGhpczt2YXIgQT0oRCYmRC5hcmd1bWVudCk/RC5hcmd1 bWVudDpudWxsO2lmKEQmJkQudGltZW91dCl7dGhpcy5fdGltZU91dFtDLnRJZF09 d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtCLmFib3J0KEMsRCx0cnVlKTt9 LEQudGltZW91dCk7fXRoaXMuX3BvbGxbQy50SWRdPXdpbmRvdy5zZXRJbnRlcnZh bChmdW5jdGlvbigpe2lmKEMuY29ubiYmQy5jb25uLnJlYWR5U3RhdGU9PT00KXt3 aW5kb3cuY2xlYXJJbnRlcnZhbChCLl9wb2xsW0MudElkXSk7ZGVsZXRlIEIuX3Bv bGxbQy50SWRdO2lmKEQmJkQudGltZW91dCl7d2luZG93LmNsZWFyVGltZW91dChC Ll90aW1lT3V0W0MudElkXSk7ZGVsZXRlIEIuX3RpbWVPdXRbQy50SWRdO31CLmNv bXBsZXRlRXZlbnQuZmlyZShDLEEpO2lmKEMuY29tcGxldGVFdmVudCl7Qy5jb21w bGV0ZUV2ZW50LmZpcmUoQyxBKTt9Qi5oYW5kbGVUcmFuc2FjdGlvblJlc3BvbnNl KEMsRCk7fX0sdGhpcy5fcG9sbGluZ19pbnRlcnZhbCk7fSxoYW5kbGVUcmFuc2Fj dGlvblJlc3BvbnNlOmZ1bmN0aW9uKEYsRyxBKXt2YXIgRCxDO3ZhciBCPShHJiZH LmFyZ3VtZW50KT9HLmFyZ3VtZW50Om51bGw7dHJ5e2lmKEYuY29ubi5zdGF0dXMh PT11bmRlZmluZWQmJkYuY29ubi5zdGF0dXMhPT0wKXtEPUYuY29ubi5zdGF0dXM7 fWVsc2V7RD0xMzAzMDt9fWNhdGNoKEUpe0Q9MTMwMzA7fWlmKEQ+PTIwMCYmRDwz MDB8fEQ9PT0xMjIzKXtDPXRoaXMuY3JlYXRlUmVzcG9uc2VPYmplY3QoRixCKTtp ZihHJiZHLnN1Y2Nlc3Mpe2lmKCFHLnNjb3BlKXtHLnN1Y2Nlc3MoQyk7fWVsc2V7 Ry5zdWNjZXNzLmFwcGx5KEcuc2NvcGUsW0NdKTt9fXRoaXMuc3VjY2Vzc0V2ZW50 LmZpcmUoQyk7aWYoRi5zdWNjZXNzRXZlbnQpe0Yuc3VjY2Vzc0V2ZW50LmZpcmUo Qyk7fX1lbHNle3N3aXRjaChEKXtjYXNlIDEyMDAyOmNhc2UgMTIwMjk6Y2FzZSAx MjAzMDpjYXNlIDEyMDMxOmNhc2UgMTIxNTI6Y2FzZSAxMzAzMDpDPXRoaXMuY3Jl YXRlRXhjZXB0aW9uT2JqZWN0KEYudElkLEIsKEE/QTpmYWxzZSkpO2lmKEcmJkcu ZmFpbHVyZSl7aWYoIUcuc2NvcGUpe0cuZmFpbHVyZShDKTt9ZWxzZXtHLmZhaWx1 cmUuYXBwbHkoRy5zY29wZSxbQ10pO319YnJlYWs7ZGVmYXVsdDpDPXRoaXMuY3Jl YXRlUmVzcG9uc2VPYmplY3QoRixCKTtpZihHJiZHLmZhaWx1cmUpe2lmKCFHLnNj b3BlKXtHLmZhaWx1cmUoQyk7fWVsc2V7Ry5mYWlsdXJlLmFwcGx5KEcuc2NvcGUs W0NdKTt9fX10aGlzLmZhaWx1cmVFdmVudC5maXJlKEMpO2lmKEYuZmFpbHVyZUV2 ZW50KXtGLmZhaWx1cmVFdmVudC5maXJlKEMpO319dGhpcy5yZWxlYXNlT2JqZWN0 KEYpO0M9bnVsbDt9LGNyZWF0ZVJlc3BvbnNlT2JqZWN0OmZ1bmN0aW9uKEEsRyl7 dmFyIEQ9e307dmFyIEk9e307dHJ5e3ZhciBDPUEuY29ubi5nZXRBbGxSZXNwb25z ZUhlYWRlcnMoKTt2YXIgRj1DLnNwbGl0KCJcbiIpO2Zvcih2YXIgRT0wO0U8Ri5s ZW5ndGg7RSsrKXt2YXIgQj1GW0VdLmluZGV4T2YoIjoiKTtpZihCIT0tMSl7SVtG W0VdLnN1YnN0cmluZygwLEIpXT1GW0VdLnN1YnN0cmluZyhCKzIpO319fWNhdGNo KEgpe31ELnRJZD1BLnRJZDtELnN0YXR1cz0oQS5jb25uLnN0YXR1cz09MTIyMyk/ MjA0OkEuY29ubi5zdGF0dXM7RC5zdGF0dXNUZXh0PShBLmNvbm4uc3RhdHVzPT0x MjIzKT8iTm8gQ29udGVudCI6QS5jb25uLnN0YXR1c1RleHQ7RC5nZXRSZXNwb25z ZUhlYWRlcj1JO0QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzPUM7RC5yZXNwb25zZVRl eHQ9QS5jb25uLnJlc3BvbnNlVGV4dDtELnJlc3BvbnNlWE1MPUEuY29ubi5yZXNw b25zZVhNTDtpZihHKXtELmFyZ3VtZW50PUc7fXJldHVybiBEO30sY3JlYXRlRXhj ZXB0aW9uT2JqZWN0OmZ1bmN0aW9uKEgsRCxBKXt2YXIgRj0wO3ZhciBHPSJjb21t dW5pY2F0aW9uIGZhaWx1cmUiO3ZhciBDPS0xO3ZhciBCPSJ0cmFuc2FjdGlvbiBh Ym9ydGVkIjt2YXIgRT17fTtFLnRJZD1IO2lmKEEpe0Uuc3RhdHVzPUM7RS5zdGF0 dXNUZXh0PUI7fWVsc2V7RS5zdGF0dXM9RjtFLnN0YXR1c1RleHQ9Rzt9aWYoRCl7 RS5hcmd1bWVudD1EO31yZXR1cm4gRTt9LGluaXRIZWFkZXI6ZnVuY3Rpb24oQSxE LEMpe3ZhciBCPShDKT90aGlzLl9kZWZhdWx0X2hlYWRlcnM6dGhpcy5faHR0cF9o ZWFkZXJzO0JbQV09RDtpZihDKXt0aGlzLl9oYXNfZGVmYXVsdF9oZWFkZXJzPXRy dWU7fWVsc2V7dGhpcy5faGFzX2h0dHBfaGVhZGVycz10cnVlO319LHNldEhlYWRl cjpmdW5jdGlvbihBKXt2YXIgQjtpZih0aGlzLl9oYXNfZGVmYXVsdF9oZWFkZXJz KXtmb3IoQiBpbiB0aGlzLl9kZWZhdWx0X2hlYWRlcnMpe2lmKFlBSE9PLmxhbmcu aGFzT3duUHJvcGVydHkodGhpcy5fZGVmYXVsdF9oZWFkZXJzLEIpKXtBLmNvbm4u c2V0UmVxdWVzdEhlYWRlcihCLHRoaXMuX2RlZmF1bHRfaGVhZGVyc1tCXSk7fX19 aWYodGhpcy5faGFzX2h0dHBfaGVhZGVycyl7Zm9yKEIgaW4gdGhpcy5faHR0cF9o ZWFkZXJzKXtpZihZQUhPTy5sYW5nLmhhc093blByb3BlcnR5KHRoaXMuX2h0dHBf aGVhZGVycyxCKSl7QS5jb25uLnNldFJlcXVlc3RIZWFkZXIoQix0aGlzLl9odHRw X2hlYWRlcnNbQl0pO319ZGVsZXRlIHRoaXMuX2h0dHBfaGVhZGVyczt0aGlzLl9o dHRwX2hlYWRlcnM9e307dGhpcy5faGFzX2h0dHBfaGVhZGVycz1mYWxzZTt9fSxy ZXNldERlZmF1bHRIZWFkZXJzOmZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX2RlZmF1 bHRfaGVhZGVyczt0aGlzLl9kZWZhdWx0X2hlYWRlcnM9e307dGhpcy5faGFzX2Rl ZmF1bHRfaGVhZGVycz1mYWxzZTt9LHNldEZvcm06ZnVuY3Rpb24oTSxILEMpe3Zh ciBMLEIsSyxJLFAsSj1mYWxzZSxGPVtdLE89MCxFLEcsRCxOLEE7dGhpcy5yZXNl dEZvcm1TdGF0ZSgpO2lmKHR5cGVvZiBNPT0ic3RyaW5nIil7TD0oZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoTSl8fGRvY3VtZW50LmZvcm1zW01dKTt9ZWxzZXtpZih0 eXBlb2YgTT09Im9iamVjdCIpe0w9TTt9ZWxzZXtyZXR1cm47fX1pZihIKXt0aGlz LmNyZWF0ZUZyYW1lKEM/QzpudWxsKTt0aGlzLl9pc0Zvcm1TdWJtaXQ9dHJ1ZTt0 aGlzLl9pc0ZpbGVVcGxvYWQ9dHJ1ZTt0aGlzLl9mb3JtTm9kZT1MO3JldHVybjt9 Zm9yKEU9MCxHPUwuZWxlbWVudHMubGVuZ3RoO0U8RzsrK0Upe0I9TC5lbGVtZW50 c1tFXTtQPUIuZGlzYWJsZWQ7Sz1CLm5hbWU7aWYoIVAmJkspe0s9ZW5jb2RlVVJJ Q29tcG9uZW50KEspKyI9IjtJPWVuY29kZVVSSUNvbXBvbmVudChCLnZhbHVlKTtz d2l0Y2goQi50eXBlKXtjYXNlInNlbGVjdC1vbmUiOmlmKEIuc2VsZWN0ZWRJbmRl eD4tMSl7QT1CLm9wdGlvbnNbQi5zZWxlY3RlZEluZGV4XTtGW08rK109SytlbmNv ZGVVUklDb21wb25lbnQoKEEuYXR0cmlidXRlcy52YWx1ZSYmQS5hdHRyaWJ1dGVz LnZhbHVlLnNwZWNpZmllZCk/QS52YWx1ZTpBLnRleHQpO31icmVhaztjYXNlInNl bGVjdC1tdWx0aXBsZSI6aWYoQi5zZWxlY3RlZEluZGV4Pi0xKXtmb3IoRD1CLnNl bGVjdGVkSW5kZXgsTj1CLm9wdGlvbnMubGVuZ3RoO0Q8TjsrK0Qpe0E9Qi5vcHRp b25zW0RdO2lmKEEuc2VsZWN0ZWQpe0ZbTysrXT1LK2VuY29kZVVSSUNvbXBvbmVu dCgoQS5hdHRyaWJ1dGVzLnZhbHVlJiZBLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lm aWVkKT9BLnZhbHVlOkEudGV4dCk7fX19YnJlYWs7Y2FzZSJyYWRpbyI6Y2FzZSJj aGVja2JveCI6aWYoQi5jaGVja2VkKXtGW08rK109SytJO31icmVhaztjYXNlImZp bGUiOmNhc2UgdW5kZWZpbmVkOmNhc2UicmVzZXQiOmNhc2UiYnV0dG9uIjpicmVh aztjYXNlInN1Ym1pdCI6aWYoSj09PWZhbHNlKXtpZih0aGlzLl9oYXNTdWJtaXRM aXN0ZW5lciYmdGhpcy5fc3VibWl0RWxlbWVudFZhbHVlKXtGW08rK109dGhpcy5f c3VibWl0RWxlbWVudFZhbHVlO31KPXRydWU7fWJyZWFrO2RlZmF1bHQ6RltPKytd PUsrSTt9fX10aGlzLl9pc0Zvcm1TdWJtaXQ9dHJ1ZTt0aGlzLl9zRm9ybURhdGE9 Ri5qb2luKCImIik7dGhpcy5pbml0SGVhZGVyKCJDb250ZW50LVR5cGUiLHRoaXMu X2RlZmF1bHRfZm9ybV9oZWFkZXIpO3JldHVybiB0aGlzLl9zRm9ybURhdGE7fSxy ZXNldEZvcm1TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2lzRm9ybVN1Ym1pdD1mYWxz ZTt0aGlzLl9pc0ZpbGVVcGxvYWQ9ZmFsc2U7dGhpcy5fZm9ybU5vZGU9bnVsbDt0 aGlzLl9zRm9ybURhdGE9IiI7fSxjcmVhdGVGcmFtZTpmdW5jdGlvbihBKXt2YXIg Qj0ieXVpSU8iK3RoaXMuX3RyYW5zYWN0aW9uX2lkO3ZhciBDO2lmKFlBSE9PLmVu di51YS5pZSl7Qz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aWZyYW1lIGlkPSIn K0IrJyIgbmFtZT0iJytCKyciIC8+Jyk7aWYodHlwZW9mIEE9PSJib29sZWFuIil7 Qy5zcmM9ImphdmFzY3JpcHQ6ZmFsc2UiO319ZWxzZXtDPWRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoImlmcmFtZSIpO0MuaWQ9QjtDLm5hbWU9Qjt9Qy5zdHlsZS5wb3Np dGlvbj0iYWJzb2x1dGUiO0Muc3R5bGUudG9wPSItMTAwMHB4IjtDLnN0eWxlLmxl ZnQ9Ii0xMDAwcHgiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQyk7fSxhcHBl bmRQb3N0RGF0YTpmdW5jdGlvbihBKXt2YXIgRD1bXSxCPUEuc3BsaXQoIiYiKSxD LEU7Zm9yKEM9MDtDPEIubGVuZ3RoO0MrKyl7RT1CW0NdLmluZGV4T2YoIj0iKTtp ZihFIT0tMSl7RFtDXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO0Rb Q10udHlwZT0iaGlkZGVuIjtEW0NdLm5hbWU9ZGVjb2RlVVJJQ29tcG9uZW50KEJb Q10uc3Vic3RyaW5nKDAsRSkpO0RbQ10udmFsdWU9ZGVjb2RlVVJJQ29tcG9uZW50 KEJbQ10uc3Vic3RyaW5nKEUrMSkpO3RoaXMuX2Zvcm1Ob2RlLmFwcGVuZENoaWxk KERbQ10pO319cmV0dXJuIEQ7fSx1cGxvYWRGaWxlOmZ1bmN0aW9uKEQsTixFLEMp e3ZhciBJPSJ5dWlJTyIrRC50SWQsSj0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsTD1k b2N1bWVudC5nZXRFbGVtZW50QnlJZChJKSxPPXRoaXMsSz0oTiYmTi5hcmd1bWVu dCk/Ti5hcmd1bWVudDpudWxsLE0sSCxCLEc7dmFyIEE9e2FjdGlvbjp0aGlzLl9m b3JtTm9kZS5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpLG1ldGhvZDp0aGlzLl9mb3Jt Tm9kZS5nZXRBdHRyaWJ1dGUoIm1ldGhvZCIpLHRhcmdldDp0aGlzLl9mb3JtTm9k ZS5nZXRBdHRyaWJ1dGUoInRhcmdldCIpfTt0aGlzLl9mb3JtTm9kZS5zZXRBdHRy aWJ1dGUoImFjdGlvbiIsRSk7dGhpcy5fZm9ybU5vZGUuc2V0QXR0cmlidXRlKCJt ZXRob2QiLCJQT1NUIik7dGhpcy5fZm9ybU5vZGUuc2V0QXR0cmlidXRlKCJ0YXJn ZXQiLEkpO2lmKFlBSE9PLmVudi51YS5pZSl7dGhpcy5fZm9ybU5vZGUuc2V0QXR0 cmlidXRlKCJlbmNvZGluZyIsSik7fWVsc2V7dGhpcy5fZm9ybU5vZGUuc2V0QXR0 cmlidXRlKCJlbmN0eXBlIixKKTt9aWYoQyl7TT10aGlzLmFwcGVuZFBvc3REYXRh KEMpO310aGlzLl9mb3JtTm9kZS5zdWJtaXQoKTt0aGlzLnN0YXJ0RXZlbnQuZmly ZShELEspO2lmKEQuc3RhcnRFdmVudCl7RC5zdGFydEV2ZW50LmZpcmUoRCxLKTt9 aWYoTiYmTi50aW1lb3V0KXt0aGlzLl90aW1lT3V0W0QudElkXT13aW5kb3cuc2V0 VGltZW91dChmdW5jdGlvbigpe08uYWJvcnQoRCxOLHRydWUpO30sTi50aW1lb3V0 KTt9aWYoTSYmTS5sZW5ndGg+MCl7Zm9yKEg9MDtIPE0ubGVuZ3RoO0grKyl7dGhp cy5fZm9ybU5vZGUucmVtb3ZlQ2hpbGQoTVtIXSk7fX1mb3IoQiBpbiBBKXtpZihZ QUhPTy5sYW5nLmhhc093blByb3BlcnR5KEEsQikpe2lmKEFbQl0pe3RoaXMuX2Zv cm1Ob2RlLnNldEF0dHJpYnV0ZShCLEFbQl0pO31lbHNle3RoaXMuX2Zvcm1Ob2Rl LnJlbW92ZUF0dHJpYnV0ZShCKTt9fX10aGlzLnJlc2V0Rm9ybVN0YXRlKCk7dmFy IEY9ZnVuY3Rpb24oKXtpZihOJiZOLnRpbWVvdXQpe3dpbmRvdy5jbGVhclRpbWVv dXQoTy5fdGltZU91dFtELnRJZF0pO2RlbGV0ZSBPLl90aW1lT3V0W0QudElkXTt9 Ty5jb21wbGV0ZUV2ZW50LmZpcmUoRCxLKTtpZihELmNvbXBsZXRlRXZlbnQpe0Qu Y29tcGxldGVFdmVudC5maXJlKEQsSyk7fUc9e3RJZDpELnRJZCxhcmd1bWVudDpO LmFyZ3VtZW50fTt0cnl7Ry5yZXNwb25zZVRleHQ9TC5jb250ZW50V2luZG93LmRv Y3VtZW50LmJvZHk/TC5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJI VE1MOkwuY29udGVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQudGV4 dENvbnRlbnQ7Ry5yZXNwb25zZVhNTD1MLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQu WE1MRG9jdW1lbnQ/TC5jb250ZW50V2luZG93LmRvY3VtZW50LlhNTERvY3VtZW50 OkwuY29udGVudFdpbmRvdy5kb2N1bWVudDt9Y2F0Y2goUCl7fWlmKE4mJk4udXBs b2FkKXtpZighTi5zY29wZSl7Ti51cGxvYWQoRyk7fWVsc2V7Ti51cGxvYWQuYXBw bHkoTi5zY29wZSxbR10pO319Ty51cGxvYWRFdmVudC5maXJlKEcpO2lmKEQudXBs b2FkRXZlbnQpe0QudXBsb2FkRXZlbnQuZmlyZShHKTt9WUFIT08udXRpbC5FdmVu dC5yZW1vdmVMaXN0ZW5lcihMLCJsb2FkIixGKTtzZXRUaW1lb3V0KGZ1bmN0aW9u KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChMKTtPLnJlbGVhc2VPYmplY3Qo RCk7fSwxMDApO307WUFIT08udXRpbC5FdmVudC5hZGRMaXN0ZW5lcihMLCJsb2Fk IixGKTt9LGFib3J0OmZ1bmN0aW9uKEUsRyxBKXt2YXIgRDt2YXIgQj0oRyYmRy5h cmd1bWVudCk/Ry5hcmd1bWVudDpudWxsO2lmKEUmJkUuY29ubil7aWYodGhpcy5p c0NhbGxJblByb2dyZXNzKEUpKXtFLmNvbm4uYWJvcnQoKTt3aW5kb3cuY2xlYXJJ bnRlcnZhbCh0aGlzLl9wb2xsW0UudElkXSk7ZGVsZXRlIHRoaXMuX3BvbGxbRS50 SWRdO2lmKEEpe3dpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZU91dFtFLnRJ ZF0pO2RlbGV0ZSB0aGlzLl90aW1lT3V0W0UudElkXTt9RD10cnVlO319ZWxzZXtp ZihFJiZFLmlzVXBsb2FkPT09dHJ1ZSl7dmFyIEM9Inl1aUlPIitFLnRJZDt2YXIg Rj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChDKTtpZihGKXtZQUhPTy51dGlsLkV2 ZW50LnJlbW92ZUxpc3RlbmVyKEYsImxvYWQiKTtkb2N1bWVudC5ib2R5LnJlbW92 ZUNoaWxkKEYpO2lmKEEpe3dpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZU91 dFtFLnRJZF0pO2RlbGV0ZSB0aGlzLl90aW1lT3V0W0UudElkXTt9RD10cnVlO319 ZWxzZXtEPWZhbHNlO319aWYoRD09PXRydWUpe3RoaXMuYWJvcnRFdmVudC5maXJl KEUsQik7aWYoRS5hYm9ydEV2ZW50KXtFLmFib3J0RXZlbnQuZmlyZShFLEIpO310 aGlzLmhhbmRsZVRyYW5zYWN0aW9uUmVzcG9uc2UoRSxHLHRydWUpO31yZXR1cm4g RDt9LGlzQ2FsbEluUHJvZ3Jlc3M6ZnVuY3Rpb24oQil7aWYoQiYmQi5jb25uKXty ZXR1cm4gQi5jb25uLnJlYWR5U3RhdGUhPT00JiZCLmNvbm4ucmVhZHlTdGF0ZSE9 PTA7fWVsc2V7aWYoQiYmQi5pc1VwbG9hZD09PXRydWUpe3ZhciBBPSJ5dWlJTyIr Qi50SWQ7cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEEpP3RydWU6ZmFs c2U7fWVsc2V7cmV0dXJuIGZhbHNlO319fSxyZWxlYXNlT2JqZWN0OmZ1bmN0aW9u KEEpe2lmKEEmJkEuY29ubil7QS5jb25uPW51bGw7QT1udWxsO319fTtZQUhPTy5y ZWdpc3RlcigiY29ubmVjdGlvbiIsWUFIT08udXRpbC5Db25uZWN0LHt2ZXJzaW9u OiIyLjcuMCIsYnVpbGQ6IjE3OTkifSk7KGZ1bmN0aW9uKCl7dmFyIEI9WUFIT08u dXRpbDt2YXIgQT1mdW5jdGlvbihELEMsRSxGKXtpZighRCl7fXRoaXMuaW5pdChE LEMsRSxGKTt9O0EuTkFNRT0iQW5pbSI7QS5wcm90b3R5cGU9e3RvU3RyaW5nOmZ1 bmN0aW9uKCl7dmFyIEM9dGhpcy5nZXRFbCgpfHx7fTt2YXIgRD1DLmlkfHxDLnRh Z05hbWU7cmV0dXJuKHRoaXMuY29uc3RydWN0b3IuTkFNRSsiOiAiK0QpO30scGF0 dGVybnM6e25vTmVnYXRpdmVzOi93aWR0aHxoZWlnaHR8b3BhY2l0eXxwYWRkaW5n L2ksb2Zmc2V0QXR0cmlidXRlOi9eKCh3aWR0aHxoZWlnaHQpfCh0b3B8bGVmdCkp JC8sZGVmYXVsdFVuaXQ6L3dpZHRofGhlaWdodHx0b3AkfGJvdHRvbSR8bGVmdCR8 cmlnaHQkL2ksb2Zmc2V0VW5pdDovXGQrKGVtfCV8ZW58ZXh8cHR8aW58Y218bW18 cGMpJC9pfSxkb01ldGhvZDpmdW5jdGlvbihDLEUsRCl7cmV0dXJuIHRoaXMubWV0 aG9kKHRoaXMuY3VycmVudEZyYW1lLEUsRC1FLHRoaXMudG90YWxGcmFtZXMpO30s c2V0QXR0cmlidXRlOmZ1bmN0aW9uKEMsRixFKXt2YXIgRD10aGlzLmdldEVsKCk7 aWYodGhpcy5wYXR0ZXJucy5ub05lZ2F0aXZlcy50ZXN0KEMpKXtGPShGPjApP0Y6 MDt9aWYoInN0eWxlImluIEQpe0IuRG9tLnNldFN0eWxlKEQsQyxGK0UpO31lbHNl e2lmKEMgaW4gRCl7RFtDXT1GO319fSxnZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oQyl7 dmFyIEU9dGhpcy5nZXRFbCgpO3ZhciBHPUIuRG9tLmdldFN0eWxlKEUsQyk7aWYo RyE9PSJhdXRvIiYmIXRoaXMucGF0dGVybnMub2Zmc2V0VW5pdC50ZXN0KEcpKXty ZXR1cm4gcGFyc2VGbG9hdChHKTt9dmFyIEQ9dGhpcy5wYXR0ZXJucy5vZmZzZXRB dHRyaWJ1dGUuZXhlYyhDKXx8W107dmFyIEg9ISEoRFszXSk7dmFyIEY9ISEoRFsy XSk7aWYoInN0eWxlImluIEUpe2lmKEZ8fChCLkRvbS5nZXRTdHlsZShFLCJwb3Np dGlvbiIpPT0iYWJzb2x1dGUiJiZIKSl7Rz1FWyJvZmZzZXQiK0RbMF0uY2hhckF0 KDApLnRvVXBwZXJDYXNlKCkrRFswXS5zdWJzdHIoMSldO31lbHNle0c9MDt9fWVs c2V7aWYoQyBpbiBFKXtHPUVbQ107fX1yZXR1cm4gRzt9LGdldERlZmF1bHRVbml0 OmZ1bmN0aW9uKEMpe2lmKHRoaXMucGF0dGVybnMuZGVmYXVsdFVuaXQudGVzdChD KSl7cmV0dXJuInB4Ijt9cmV0dXJuIiI7fSxzZXRSdW50aW1lQXR0cmlidXRlOmZ1 bmN0aW9uKEQpe3ZhciBJO3ZhciBFO3ZhciBGPXRoaXMuYXR0cmlidXRlczt0aGlz LnJ1bnRpbWVBdHRyaWJ1dGVzW0RdPXt9O3ZhciBIPWZ1bmN0aW9uKEope3JldHVy bih0eXBlb2YgSiE9PSJ1bmRlZmluZWQiKTt9O2lmKCFIKEZbRF1bInRvIl0pJiYh SChGW0RdWyJieSJdKSl7cmV0dXJuIGZhbHNlO31JPShIKEZbRF1bImZyb20iXSkp P0ZbRF1bImZyb20iXTp0aGlzLmdldEF0dHJpYnV0ZShEKTtpZihIKEZbRF1bInRv Il0pKXtFPUZbRF1bInRvIl07fWVsc2V7aWYoSChGW0RdWyJieSJdKSl7aWYoSS5j b25zdHJ1Y3Rvcj09QXJyYXkpe0U9W107Zm9yKHZhciBHPTAsQz1JLmxlbmd0aDtH PEM7KytHKXtFW0ddPUlbR10rRltEXVsiYnkiXVtHXSoxO319ZWxzZXtFPUkrRltE XVsiYnkiXSoxO319fXRoaXMucnVudGltZUF0dHJpYnV0ZXNbRF0uc3RhcnQ9STt0 aGlzLnJ1bnRpbWVBdHRyaWJ1dGVzW0RdLmVuZD1FO3RoaXMucnVudGltZUF0dHJp YnV0ZXNbRF0udW5pdD0oSChGW0RdLnVuaXQpKT9GW0RdWyJ1bml0Il06dGhpcy5n ZXREZWZhdWx0VW5pdChEKTtyZXR1cm4gdHJ1ZTt9LGluaXQ6ZnVuY3Rpb24oRSxK LEksQyl7dmFyIEQ9ZmFsc2U7dmFyIEY9bnVsbDt2YXIgSD0wO0U9Qi5Eb20uZ2V0 KEUpO3RoaXMuYXR0cmlidXRlcz1KfHx7fTt0aGlzLmR1cmF0aW9uPSFZQUhPTy5s YW5nLmlzVW5kZWZpbmVkKEkpP0k6MTt0aGlzLm1ldGhvZD1DfHxCLkVhc2luZy5l YXNlTm9uZTt0aGlzLnVzZVNlY29uZHM9dHJ1ZTt0aGlzLmN1cnJlbnRGcmFtZT0w O3RoaXMudG90YWxGcmFtZXM9Qi5BbmltTWdyLmZwczt0aGlzLnNldEVsPWZ1bmN0 aW9uKE0pe0U9Qi5Eb20uZ2V0KE0pO307dGhpcy5nZXRFbD1mdW5jdGlvbigpe3Jl dHVybiBFO307dGhpcy5pc0FuaW1hdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIEQ7fTt0 aGlzLmdldFN0YXJ0VGltZT1mdW5jdGlvbigpe3JldHVybiBGO307dGhpcy5ydW50 aW1lQXR0cmlidXRlcz17fTt0aGlzLmFuaW1hdGU9ZnVuY3Rpb24oKXtpZih0aGlz LmlzQW5pbWF0ZWQoKSl7cmV0dXJuIGZhbHNlO310aGlzLmN1cnJlbnRGcmFtZT0w O3RoaXMudG90YWxGcmFtZXM9KHRoaXMudXNlU2Vjb25kcyk/TWF0aC5jZWlsKEIu QW5pbU1nci5mcHMqdGhpcy5kdXJhdGlvbik6dGhpcy5kdXJhdGlvbjtpZih0aGlz LmR1cmF0aW9uPT09MCYmdGhpcy51c2VTZWNvbmRzKXt0aGlzLnRvdGFsRnJhbWVz PTE7fUIuQW5pbU1nci5yZWdpc3RlckVsZW1lbnQodGhpcyk7cmV0dXJuIHRydWU7 fTt0aGlzLnN0b3A9ZnVuY3Rpb24oTSl7aWYoIXRoaXMuaXNBbmltYXRlZCgpKXty ZXR1cm4gZmFsc2U7fWlmKE0pe3RoaXMuY3VycmVudEZyYW1lPXRoaXMudG90YWxG cmFtZXM7dGhpcy5fb25Ud2Vlbi5maXJlKCk7fUIuQW5pbU1nci5zdG9wKHRoaXMp O307dmFyIEw9ZnVuY3Rpb24oKXt0aGlzLm9uU3RhcnQuZmlyZSgpO3RoaXMucnVu dGltZUF0dHJpYnV0ZXM9e307Zm9yKHZhciBNIGluIHRoaXMuYXR0cmlidXRlcyl7 dGhpcy5zZXRSdW50aW1lQXR0cmlidXRlKE0pO31EPXRydWU7SD0wO0Y9bmV3IERh dGUoKTt9O3ZhciBLPWZ1bmN0aW9uKCl7dmFyIE89e2R1cmF0aW9uOm5ldyBEYXRl KCktdGhpcy5nZXRTdGFydFRpbWUoKSxjdXJyZW50RnJhbWU6dGhpcy5jdXJyZW50 RnJhbWV9O08udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4oImR1cmF0aW9uOiAi K08uZHVyYXRpb24rIiwgY3VycmVudEZyYW1lOiAiK08uY3VycmVudEZyYW1lKTt9 O3RoaXMub25Ud2Vlbi5maXJlKE8pO3ZhciBOPXRoaXMucnVudGltZUF0dHJpYnV0 ZXM7Zm9yKHZhciBNIGluIE4pe3RoaXMuc2V0QXR0cmlidXRlKE0sdGhpcy5kb01l dGhvZChNLE5bTV0uc3RhcnQsTltNXS5lbmQpLE5bTV0udW5pdCk7fUgrPTE7fTt2 YXIgRz1mdW5jdGlvbigpe3ZhciBNPShuZXcgRGF0ZSgpLUYpLzEwMDA7dmFyIE49 e2R1cmF0aW9uOk0sZnJhbWVzOkgsZnBzOkgvTX07Ti50b1N0cmluZz1mdW5jdGlv bigpe3JldHVybigiZHVyYXRpb246ICIrTi5kdXJhdGlvbisiLCBmcmFtZXM6ICIr Ti5mcmFtZXMrIiwgZnBzOiAiK04uZnBzKTt9O0Q9ZmFsc2U7SD0wO3RoaXMub25D b21wbGV0ZS5maXJlKE4pO307dGhpcy5fb25TdGFydD1uZXcgQi5DdXN0b21FdmVu dCgiX3N0YXJ0Iix0aGlzLHRydWUpO3RoaXMub25TdGFydD1uZXcgQi5DdXN0b21F dmVudCgic3RhcnQiLHRoaXMpO3RoaXMub25Ud2Vlbj1uZXcgQi5DdXN0b21FdmVu dCgidHdlZW4iLHRoaXMpO3RoaXMuX29uVHdlZW49bmV3IEIuQ3VzdG9tRXZlbnQo Il90d2VlbiIsdGhpcyx0cnVlKTt0aGlzLm9uQ29tcGxldGU9bmV3IEIuQ3VzdG9t RXZlbnQoImNvbXBsZXRlIix0aGlzKTt0aGlzLl9vbkNvbXBsZXRlPW5ldyBCLkN1 c3RvbUV2ZW50KCJfY29tcGxldGUiLHRoaXMsdHJ1ZSk7dGhpcy5fb25TdGFydC5z dWJzY3JpYmUoTCk7dGhpcy5fb25Ud2Vlbi5zdWJzY3JpYmUoSyk7dGhpcy5fb25D b21wbGV0ZS5zdWJzY3JpYmUoRyk7fX07Qi5BbmltPUE7fSkoKTtZQUhPTy51dGls LkFuaW1NZ3I9bmV3IGZ1bmN0aW9uKCl7dmFyIEM9bnVsbDt2YXIgQj1bXTt2YXIg QT0wO3RoaXMuZnBzPTEwMDA7dGhpcy5kZWxheT0xO3RoaXMucmVnaXN0ZXJFbGVt ZW50PWZ1bmN0aW9uKEYpe0JbQi5sZW5ndGhdPUY7QSs9MTtGLl9vblN0YXJ0LmZp cmUoKTt0aGlzLnN0YXJ0KCk7fTt0aGlzLnVuUmVnaXN0ZXI9ZnVuY3Rpb24oRyxG KXtGPUZ8fEUoRyk7aWYoIUcuaXNBbmltYXRlZCgpfHxGPT0tMSl7cmV0dXJuIGZh bHNlO31HLl9vbkNvbXBsZXRlLmZpcmUoKTtCLnNwbGljZShGLDEpO0EtPTE7aWYo QTw9MCl7dGhpcy5zdG9wKCk7fXJldHVybiB0cnVlO307dGhpcy5zdGFydD1mdW5j dGlvbigpe2lmKEM9PT1udWxsKXtDPXNldEludGVydmFsKHRoaXMucnVuLHRoaXMu ZGVsYXkpO319O3RoaXMuc3RvcD1mdW5jdGlvbihIKXtpZighSCl7Y2xlYXJJbnRl cnZhbChDKTtmb3IodmFyIEc9MCxGPUIubGVuZ3RoO0c8RjsrK0cpe3RoaXMudW5S ZWdpc3RlcihCWzBdLDApO31CPVtdO0M9bnVsbDtBPTA7fWVsc2V7dGhpcy51blJl Z2lzdGVyKEgpO319O3RoaXMucnVuPWZ1bmN0aW9uKCl7Zm9yKHZhciBIPTAsRj1C Lmxlbmd0aDtIPEY7KytIKXt2YXIgRz1CW0hdO2lmKCFHfHwhRy5pc0FuaW1hdGVk KCkpe2NvbnRpbnVlO31pZihHLmN1cnJlbnRGcmFtZTxHLnRvdGFsRnJhbWVzfHxH LnRvdGFsRnJhbWVzPT09bnVsbCl7Ry5jdXJyZW50RnJhbWUrPTE7aWYoRy51c2VT ZWNvbmRzKXtEKEcpO31HLl9vblR3ZWVuLmZpcmUoKTt9ZWxzZXtZQUhPTy51dGls LkFuaW1NZ3Iuc3RvcChHLEgpO319fTt2YXIgRT1mdW5jdGlvbihIKXtmb3IodmFy IEc9MCxGPUIubGVuZ3RoO0c8RjsrK0cpe2lmKEJbR109PUgpe3JldHVybiBHO319 cmV0dXJuLTE7fTt2YXIgRD1mdW5jdGlvbihHKXt2YXIgSj1HLnRvdGFsRnJhbWVz O3ZhciBJPUcuY3VycmVudEZyYW1lO3ZhciBIPShHLmN1cnJlbnRGcmFtZSpHLmR1 cmF0aW9uKjEwMDAvRy50b3RhbEZyYW1lcyk7dmFyIEY9KG5ldyBEYXRlKCktRy5n ZXRTdGFydFRpbWUoKSk7dmFyIEs9MDtpZihGPEcuZHVyYXRpb24qMTAwMCl7Sz1N YXRoLnJvdW5kKChGL0gtMSkqRy5jdXJyZW50RnJhbWUpO31lbHNle0s9Si0oSSsx KTt9aWYoSz4wJiZpc0Zpbml0ZShLKSl7aWYoRy5jdXJyZW50RnJhbWUrSz49Sil7 Sz1KLShJKzEpO31HLmN1cnJlbnRGcmFtZSs9Szt9fTt9O1lBSE9PLnV0aWwuQmV6 aWVyPW5ldyBmdW5jdGlvbigpe3RoaXMuZ2V0UG9zaXRpb249ZnVuY3Rpb24oRSxE KXt2YXIgRj1FLmxlbmd0aDt2YXIgQz1bXTtmb3IodmFyIEI9MDtCPEY7KytCKXtD W0JdPVtFW0JdWzBdLEVbQl1bMV1dO31mb3IodmFyIEE9MTtBPEY7KytBKXtmb3Io Qj0wO0I8Ri1BOysrQil7Q1tCXVswXT0oMS1EKSpDW0JdWzBdK0QqQ1twYXJzZUlu dChCKzEsMTApXVswXTtDW0JdWzFdPSgxLUQpKkNbQl1bMV0rRCpDW3BhcnNlSW50 KEIrMSwxMCldWzFdO319cmV0dXJuW0NbMF1bMF0sQ1swXVsxXV07fTt9OyhmdW5j dGlvbigpe3ZhciBBPWZ1bmN0aW9uKEYsRSxHLEgpe0Euc3VwZXJjbGFzcy5jb25z dHJ1Y3Rvci5jYWxsKHRoaXMsRixFLEcsSCk7fTtBLk5BTUU9IkNvbG9yQW5pbSI7 QS5ERUZBVUxUX0JHQ09MT1I9IiNmZmYiO3ZhciBDPVlBSE9PLnV0aWw7WUFIT08u ZXh0ZW5kKEEsQy5BbmltKTt2YXIgRD1BLnN1cGVyY2xhc3M7dmFyIEI9QS5wcm90 b3R5cGU7Qi5wYXR0ZXJucy5jb2xvcj0vY29sb3IkL2k7Qi5wYXR0ZXJucy5yZ2I9 L15yZ2JcKChbMC05XSspXHMqLFxzKihbMC05XSspXHMqLFxzKihbMC05XSspXCkk L2k7Qi5wYXR0ZXJucy5oZXg9L14jPyhbMC05QS1GXXsyfSkoWzAtOUEtRl17Mn0p KFswLTlBLUZdezJ9KSQvaTtCLnBhdHRlcm5zLmhleDM9L14jPyhbMC05QS1GXXsx fSkoWzAtOUEtRl17MX0pKFswLTlBLUZdezF9KSQvaTtCLnBhdHRlcm5zLnRyYW5z cGFyZW50PS9edHJhbnNwYXJlbnR8cmdiYVwoMCwgMCwgMCwgMFwpJC87Qi5wYXJz ZUNvbG9yPWZ1bmN0aW9uKEUpe2lmKEUubGVuZ3RoPT0zKXtyZXR1cm4gRTt9dmFy IEY9dGhpcy5wYXR0ZXJucy5oZXguZXhlYyhFKTtpZihGJiZGLmxlbmd0aD09NCl7 cmV0dXJuW3BhcnNlSW50KEZbMV0sMTYpLHBhcnNlSW50KEZbMl0sMTYpLHBhcnNl SW50KEZbM10sMTYpXTt9Rj10aGlzLnBhdHRlcm5zLnJnYi5leGVjKEUpO2lmKEYm JkYubGVuZ3RoPT00KXtyZXR1cm5bcGFyc2VJbnQoRlsxXSwxMCkscGFyc2VJbnQo RlsyXSwxMCkscGFyc2VJbnQoRlszXSwxMCldO31GPXRoaXMucGF0dGVybnMuaGV4 My5leGVjKEUpO2lmKEYmJkYubGVuZ3RoPT00KXtyZXR1cm5bcGFyc2VJbnQoRlsx XStGWzFdLDE2KSxwYXJzZUludChGWzJdK0ZbMl0sMTYpLHBhcnNlSW50KEZbM10r RlszXSwxNildO31yZXR1cm4gbnVsbDt9O0IuZ2V0QXR0cmlidXRlPWZ1bmN0aW9u KEUpe3ZhciBHPXRoaXMuZ2V0RWwoKTtpZih0aGlzLnBhdHRlcm5zLmNvbG9yLnRl c3QoRSkpe3ZhciBJPVlBSE9PLnV0aWwuRG9tLmdldFN0eWxlKEcsRSk7dmFyIEg9 dGhpcztpZih0aGlzLnBhdHRlcm5zLnRyYW5zcGFyZW50LnRlc3QoSSkpe3ZhciBG PVlBSE9PLnV0aWwuRG9tLmdldEFuY2VzdG9yQnkoRyxmdW5jdGlvbihKKXtyZXR1 cm4hSC5wYXR0ZXJucy50cmFuc3BhcmVudC50ZXN0KEkpO30pO2lmKEYpe0k9Qy5E b20uZ2V0U3R5bGUoRixFKTt9ZWxzZXtJPUEuREVGQVVMVF9CR0NPTE9SO319fWVs c2V7ST1ELmdldEF0dHJpYnV0ZS5jYWxsKHRoaXMsRSk7fXJldHVybiBJO307Qi5k b01ldGhvZD1mdW5jdGlvbihGLEosRyl7dmFyIEk7aWYodGhpcy5wYXR0ZXJucy5j b2xvci50ZXN0KEYpKXtJPVtdO2Zvcih2YXIgSD0wLEU9Si5sZW5ndGg7SDxFOysr SCl7SVtIXT1ELmRvTWV0aG9kLmNhbGwodGhpcyxGLEpbSF0sR1tIXSk7fUk9InJn YigiK01hdGguZmxvb3IoSVswXSkrIiwiK01hdGguZmxvb3IoSVsxXSkrIiwiK01h dGguZmxvb3IoSVsyXSkrIikiO31lbHNle0k9RC5kb01ldGhvZC5jYWxsKHRoaXMs RixKLEcpO31yZXR1cm4gSTt9O0Iuc2V0UnVudGltZUF0dHJpYnV0ZT1mdW5jdGlv bihGKXtELnNldFJ1bnRpbWVBdHRyaWJ1dGUuY2FsbCh0aGlzLEYpO2lmKHRoaXMu cGF0dGVybnMuY29sb3IudGVzdChGKSl7dmFyIEg9dGhpcy5hdHRyaWJ1dGVzO3Zh ciBKPXRoaXMucGFyc2VDb2xvcih0aGlzLnJ1bnRpbWVBdHRyaWJ1dGVzW0ZdLnN0 YXJ0KTt2YXIgRz10aGlzLnBhcnNlQ29sb3IodGhpcy5ydW50aW1lQXR0cmlidXRl c1tGXS5lbmQpO2lmKHR5cGVvZiBIW0ZdWyJ0byJdPT09InVuZGVmaW5lZCImJnR5 cGVvZiBIW0ZdWyJieSJdIT09InVuZGVmaW5lZCIpe0c9dGhpcy5wYXJzZUNvbG9y KEhbRl0uYnkpO2Zvcih2YXIgST0wLEU9Si5sZW5ndGg7STxFOysrSSl7R1tJXT1K W0ldK0dbSV07fX10aGlzLnJ1bnRpbWVBdHRyaWJ1dGVzW0ZdLnN0YXJ0PUo7dGhp cy5ydW50aW1lQXR0cmlidXRlc1tGXS5lbmQ9Rzt9fTtDLkNvbG9yQW5pbT1BO30p KCk7WUFIT08udXRpbC5FYXNpbmc9e2Vhc2VOb25lOmZ1bmN0aW9uKEIsQSxELEMp e3JldHVybiBEKkIvQytBO30sZWFzZUluOmZ1bmN0aW9uKEIsQSxELEMpe3JldHVy biBEKihCLz1DKSpCK0E7fSxlYXNlT3V0OmZ1bmN0aW9uKEIsQSxELEMpe3JldHVy bi1EKihCLz1DKSooQi0yKStBO30sZWFzZUJvdGg6ZnVuY3Rpb24oQixBLEQsQyl7 aWYoKEIvPUMvMik8MSl7cmV0dXJuIEQvMipCKkIrQTt9cmV0dXJuLUQvMiooKC0t QikqKEItMiktMSkrQTt9LGVhc2VJblN0cm9uZzpmdW5jdGlvbihCLEEsRCxDKXty ZXR1cm4gRCooQi89QykqQipCKkIrQTt9LGVhc2VPdXRTdHJvbmc6ZnVuY3Rpb24o QixBLEQsQyl7cmV0dXJuLUQqKChCPUIvQy0xKSpCKkIqQi0xKStBO30sZWFzZUJv dGhTdHJvbmc6ZnVuY3Rpb24oQixBLEQsQyl7aWYoKEIvPUMvMik8MSl7cmV0dXJu IEQvMipCKkIqQipCK0E7fXJldHVybi1ELzIqKChCLT0yKSpCKkIqQi0yKStBO30s ZWxhc3RpY0luOmZ1bmN0aW9uKEMsQSxHLEYsQixFKXtpZihDPT0wKXtyZXR1cm4g QTt9aWYoKEMvPUYpPT0xKXtyZXR1cm4gQStHO31pZighRSl7RT1GKjAuMzt9aWYo IUJ8fEI8TWF0aC5hYnMoRykpe0I9Rzt2YXIgRD1FLzQ7fWVsc2V7dmFyIEQ9RS8o MipNYXRoLlBJKSpNYXRoLmFzaW4oRy9CKTt9cmV0dXJuLShCKk1hdGgucG93KDIs MTAqKEMtPTEpKSpNYXRoLnNpbigoQypGLUQpKigyKk1hdGguUEkpL0UpKStBO30s ZWxhc3RpY091dDpmdW5jdGlvbihDLEEsRyxGLEIsRSl7aWYoQz09MCl7cmV0dXJu IEE7fWlmKChDLz1GKT09MSl7cmV0dXJuIEErRzt9aWYoIUUpe0U9RiowLjM7fWlm KCFCfHxCPE1hdGguYWJzKEcpKXtCPUc7dmFyIEQ9RS80O31lbHNle3ZhciBEPUUv KDIqTWF0aC5QSSkqTWF0aC5hc2luKEcvQik7fXJldHVybiBCKk1hdGgucG93KDIs LTEwKkMpKk1hdGguc2luKChDKkYtRCkqKDIqTWF0aC5QSSkvRSkrRytBO30sZWxh c3RpY0JvdGg6ZnVuY3Rpb24oQyxBLEcsRixCLEUpe2lmKEM9PTApe3JldHVybiBB O31pZigoQy89Ri8yKT09Mil7cmV0dXJuIEErRzt9aWYoIUUpe0U9RiooMC4zKjEu NSk7fWlmKCFCfHxCPE1hdGguYWJzKEcpKXtCPUc7dmFyIEQ9RS80O31lbHNle3Zh ciBEPUUvKDIqTWF0aC5QSSkqTWF0aC5hc2luKEcvQik7fWlmKEM8MSl7cmV0dXJu LTAuNSooQipNYXRoLnBvdygyLDEwKihDLT0xKSkqTWF0aC5zaW4oKEMqRi1EKSoo MipNYXRoLlBJKS9FKSkrQTt9cmV0dXJuIEIqTWF0aC5wb3coMiwtMTAqKEMtPTEp KSpNYXRoLnNpbigoQypGLUQpKigyKk1hdGguUEkpL0UpKjAuNStHK0E7fSxiYWNr SW46ZnVuY3Rpb24oQixBLEUsRCxDKXtpZih0eXBlb2YgQz09InVuZGVmaW5lZCIp e0M9MS43MDE1ODt9cmV0dXJuIEUqKEIvPUQpKkIqKChDKzEpKkItQykrQTt9LGJh Y2tPdXQ6ZnVuY3Rpb24oQixBLEUsRCxDKXtpZih0eXBlb2YgQz09InVuZGVmaW5l ZCIpe0M9MS43MDE1ODt9cmV0dXJuIEUqKChCPUIvRC0xKSpCKigoQysxKSpCK0Mp KzEpK0E7fSxiYWNrQm90aDpmdW5jdGlvbihCLEEsRSxELEMpe2lmKHR5cGVvZiBD PT0idW5kZWZpbmVkIil7Qz0xLjcwMTU4O31pZigoQi89RC8yKTwxKXtyZXR1cm4g RS8yKihCKkIqKCgoQyo9KDEuNTI1KSkrMSkqQi1DKSkrQTt9cmV0dXJuIEUvMioo KEItPTIpKkIqKCgoQyo9KDEuNTI1KSkrMSkqQitDKSsyKStBO30sYm91bmNlSW46 ZnVuY3Rpb24oQixBLEQsQyl7cmV0dXJuIEQtWUFIT08udXRpbC5FYXNpbmcuYm91 bmNlT3V0KEMtQiwwLEQsQykrQTt9LGJvdW5jZU91dDpmdW5jdGlvbihCLEEsRCxD KXtpZigoQi89Qyk8KDEvMi43NSkpe3JldHVybiBEKig3LjU2MjUqQipCKStBO31l bHNle2lmKEI8KDIvMi43NSkpe3JldHVybiBEKig3LjU2MjUqKEItPSgxLjUvMi43 NSkpKkIrMC43NSkrQTt9ZWxzZXtpZihCPCgyLjUvMi43NSkpe3JldHVybiBEKig3 LjU2MjUqKEItPSgyLjI1LzIuNzUpKSpCKzAuOTM3NSkrQTt9fX1yZXR1cm4gRCoo Ny41NjI1KihCLT0oMi42MjUvMi43NSkpKkIrMC45ODQzNzUpK0E7fSxib3VuY2VC b3RoOmZ1bmN0aW9uKEIsQSxELEMpe2lmKEI8Qy8yKXtyZXR1cm4gWUFIT08udXRp bC5FYXNpbmcuYm91bmNlSW4oQioyLDAsRCxDKSowLjUrQTt9cmV0dXJuIFlBSE9P LnV0aWwuRWFzaW5nLmJvdW5jZU91dChCKjItQywwLEQsQykqMC41K0QqMC41K0E7 fX07KGZ1bmN0aW9uKCl7dmFyIEE9ZnVuY3Rpb24oSCxHLEksSil7aWYoSCl7QS5z dXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxILEcsSSxKKTt9fTtBLk5B TUU9Ik1vdGlvbiI7dmFyIEU9WUFIT08udXRpbDtZQUhPTy5leHRlbmQoQSxFLkNv bG9yQW5pbSk7dmFyIEY9QS5zdXBlcmNsYXNzO3ZhciBDPUEucHJvdG90eXBlO0Mu cGF0dGVybnMucG9pbnRzPS9ecG9pbnRzJC9pO0Muc2V0QXR0cmlidXRlPWZ1bmN0 aW9uKEcsSSxIKXtpZih0aGlzLnBhdHRlcm5zLnBvaW50cy50ZXN0KEcpKXtIPUh8 fCJweCI7Ri5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLCJsZWZ0IixJWzBdLEgpO0Yu c2V0QXR0cmlidXRlLmNhbGwodGhpcywidG9wIixJWzFdLEgpO31lbHNle0Yuc2V0 QXR0cmlidXRlLmNhbGwodGhpcyxHLEksSCk7fX07Qy5nZXRBdHRyaWJ1dGU9ZnVu Y3Rpb24oRyl7aWYodGhpcy5wYXR0ZXJucy5wb2ludHMudGVzdChHKSl7dmFyIEg9 W0YuZ2V0QXR0cmlidXRlLmNhbGwodGhpcywibGVmdCIpLEYuZ2V0QXR0cmlidXRl LmNhbGwodGhpcywidG9wIildO31lbHNle0g9Ri5nZXRBdHRyaWJ1dGUuY2FsbCh0 aGlzLEcpO31yZXR1cm4gSDt9O0MuZG9NZXRob2Q9ZnVuY3Rpb24oRyxLLEgpe3Zh ciBKPW51bGw7aWYodGhpcy5wYXR0ZXJucy5wb2ludHMudGVzdChHKSl7dmFyIEk9 dGhpcy5tZXRob2QodGhpcy5jdXJyZW50RnJhbWUsMCwxMDAsdGhpcy50b3RhbEZy YW1lcykvMTAwO0o9RS5CZXppZXIuZ2V0UG9zaXRpb24odGhpcy5ydW50aW1lQXR0 cmlidXRlc1tHXSxJKTt9ZWxzZXtKPUYuZG9NZXRob2QuY2FsbCh0aGlzLEcsSyxI KTt9cmV0dXJuIEo7fTtDLnNldFJ1bnRpbWVBdHRyaWJ1dGU9ZnVuY3Rpb24oUCl7 aWYodGhpcy5wYXR0ZXJucy5wb2ludHMudGVzdChQKSl7dmFyIEg9dGhpcy5nZXRF bCgpO3ZhciBKPXRoaXMuYXR0cmlidXRlczt2YXIgRzt2YXIgTD1KWyJwb2ludHMi XVsiY29udHJvbCJdfHxbXTt2YXIgSTt2YXIgTSxPO2lmKEwubGVuZ3RoPjAmJiEo TFswXWluc3RhbmNlb2YgQXJyYXkpKXtMPVtMXTt9ZWxzZXt2YXIgSz1bXTtmb3Io TT0wLE89TC5sZW5ndGg7TTxPOysrTSl7S1tNXT1MW01dO31MPUs7fWlmKEUuRG9t LmdldFN0eWxlKEgsInBvc2l0aW9uIik9PSJzdGF0aWMiKXtFLkRvbS5zZXRTdHls ZShILCJwb3NpdGlvbiIsInJlbGF0aXZlIik7fWlmKEQoSlsicG9pbnRzIl1bImZy b20iXSkpe0UuRG9tLnNldFhZKEgsSlsicG9pbnRzIl1bImZyb20iXSk7fWVsc2V7 RS5Eb20uc2V0WFkoSCxFLkRvbS5nZXRYWShIKSk7fUc9dGhpcy5nZXRBdHRyaWJ1 dGUoInBvaW50cyIpO2lmKEQoSlsicG9pbnRzIl1bInRvIl0pKXtJPUIuY2FsbCh0 aGlzLEpbInBvaW50cyJdWyJ0byJdLEcpO3ZhciBOPUUuRG9tLmdldFhZKHRoaXMu Z2V0RWwoKSk7Zm9yKE09MCxPPUwubGVuZ3RoO008TzsrK00pe0xbTV09Qi5jYWxs KHRoaXMsTFtNXSxHKTt9fWVsc2V7aWYoRChKWyJwb2ludHMiXVsiYnkiXSkpe0k9 W0dbMF0rSlsicG9pbnRzIl1bImJ5Il1bMF0sR1sxXStKWyJwb2ludHMiXVsiYnki XVsxXV07Zm9yKE09MCxPPUwubGVuZ3RoO008TzsrK00pe0xbTV09W0dbMF0rTFtN XVswXSxHWzFdK0xbTV1bMV1dO319fXRoaXMucnVudGltZUF0dHJpYnV0ZXNbUF09 W0ddO2lmKEwubGVuZ3RoPjApe3RoaXMucnVudGltZUF0dHJpYnV0ZXNbUF09dGhp cy5ydW50aW1lQXR0cmlidXRlc1tQXS5jb25jYXQoTCk7fXRoaXMucnVudGltZUF0 dHJpYnV0ZXNbUF1bdGhpcy5ydW50aW1lQXR0cmlidXRlc1tQXS5sZW5ndGhdPUk7 fWVsc2V7Ri5zZXRSdW50aW1lQXR0cmlidXRlLmNhbGwodGhpcyxQKTt9fTt2YXIg Qj1mdW5jdGlvbihHLEkpe3ZhciBIPUUuRG9tLmdldFhZKHRoaXMuZ2V0RWwoKSk7 Rz1bR1swXS1IWzBdK0lbMF0sR1sxXS1IWzFdK0lbMV1dO3JldHVybiBHO307dmFy IEQ9ZnVuY3Rpb24oRyl7cmV0dXJuKHR5cGVvZiBHIT09InVuZGVmaW5lZCIpO307 RS5Nb3Rpb249QTt9KSgpOyhmdW5jdGlvbigpe3ZhciBEPWZ1bmN0aW9uKEYsRSxH LEgpe2lmKEYpe0Quc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsRixF LEcsSCk7fX07RC5OQU1FPSJTY3JvbGwiO3ZhciBCPVlBSE9PLnV0aWw7WUFIT08u ZXh0ZW5kKEQsQi5Db2xvckFuaW0pO3ZhciBDPUQuc3VwZXJjbGFzczt2YXIgQT1E LnByb3RvdHlwZTtBLmRvTWV0aG9kPWZ1bmN0aW9uKEUsSCxGKXt2YXIgRz1udWxs O2lmKEU9PSJzY3JvbGwiKXtHPVt0aGlzLm1ldGhvZCh0aGlzLmN1cnJlbnRGcmFt ZSxIWzBdLEZbMF0tSFswXSx0aGlzLnRvdGFsRnJhbWVzKSx0aGlzLm1ldGhvZCh0 aGlzLmN1cnJlbnRGcmFtZSxIWzFdLEZbMV0tSFsxXSx0aGlzLnRvdGFsRnJhbWVz KV07fWVsc2V7Rz1DLmRvTWV0aG9kLmNhbGwodGhpcyxFLEgsRik7fXJldHVybiBH O307QS5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oRSl7dmFyIEc9bnVsbDt2YXIgRj10 aGlzLmdldEVsKCk7aWYoRT09InNjcm9sbCIpe0c9W0Yuc2Nyb2xsTGVmdCxGLnNj cm9sbFRvcF07fWVsc2V7Rz1DLmdldEF0dHJpYnV0ZS5jYWxsKHRoaXMsRSk7fXJl dHVybiBHO307QS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oRSxILEcpe3ZhciBGPXRo aXMuZ2V0RWwoKTtpZihFPT0ic2Nyb2xsIil7Ri5zY3JvbGxMZWZ0PUhbMF07Ri5z Y3JvbGxUb3A9SFsxXTt9ZWxzZXtDLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsRSxI LEcpO319O0IuU2Nyb2xsPUQ7fSkoKTtZQUhPTy5yZWdpc3RlcigiYW5pbWF0aW9u IixZQUhPTy51dGlsLkFuaW0se3ZlcnNpb246IjIuNy4wIixidWlsZDoiMTc5OSJ9 KTsoZnVuY3Rpb24oKXtZQUhPTy51dGlsLkNvbmZpZz1mdW5jdGlvbihEKXtpZihE KXt0aGlzLmluaXQoRCk7fX07dmFyIEI9WUFIT08ubGFuZyxDPVlBSE9PLnV0aWwu Q3VzdG9tRXZlbnQsQT1ZQUhPTy51dGlsLkNvbmZpZztBLkNPTkZJR19DSEFOR0VE X0VWRU5UPSJjb25maWdDaGFuZ2VkIjtBLkJPT0xFQU5fVFlQRT0iYm9vbGVhbiI7 QS5wcm90b3R5cGU9e293bmVyOm51bGwscXVldWVJblByb2dyZXNzOmZhbHNlLGNv bmZpZzpudWxsLGluaXRpYWxDb25maWc6bnVsbCxldmVudFF1ZXVlOm51bGwsY29u ZmlnQ2hhbmdlZEV2ZW50Om51bGwsaW5pdDpmdW5jdGlvbihEKXt0aGlzLm93bmVy PUQ7dGhpcy5jb25maWdDaGFuZ2VkRXZlbnQ9dGhpcy5jcmVhdGVFdmVudChBLkNP TkZJR19DSEFOR0VEX0VWRU5UKTt0aGlzLmNvbmZpZ0NoYW5nZWRFdmVudC5zaWdu YXR1cmU9Qy5MSVNUO3RoaXMucXVldWVJblByb2dyZXNzPWZhbHNlO3RoaXMuY29u ZmlnPXt9O3RoaXMuaW5pdGlhbENvbmZpZz17fTt0aGlzLmV2ZW50UXVldWU9W107 fSxjaGVja0Jvb2xlYW46ZnVuY3Rpb24oRCl7cmV0dXJuKHR5cGVvZiBEPT1BLkJP T0xFQU5fVFlQRSk7fSxjaGVja051bWJlcjpmdW5jdGlvbihEKXtyZXR1cm4oIWlz TmFOKEQpKTt9LGZpcmVFdmVudDpmdW5jdGlvbihELEYpe3ZhciBFPXRoaXMuY29u ZmlnW0RdO2lmKEUmJkUuZXZlbnQpe0UuZXZlbnQuZmlyZShGKTt9fSxhZGRQcm9w ZXJ0eTpmdW5jdGlvbihFLEQpe0U9RS50b0xvd2VyQ2FzZSgpO3RoaXMuY29uZmln W0VdPUQ7RC5ldmVudD10aGlzLmNyZWF0ZUV2ZW50KEUse3Njb3BlOnRoaXMub3du ZXJ9KTtELmV2ZW50LnNpZ25hdHVyZT1DLkxJU1Q7RC5rZXk9RTtpZihELmhhbmRs ZXIpe0QuZXZlbnQuc3Vic2NyaWJlKEQuaGFuZGxlcix0aGlzLm93bmVyKTt9dGhp cy5zZXRQcm9wZXJ0eShFLEQudmFsdWUsdHJ1ZSk7aWYoIUQuc3VwcHJlc3NFdmVu dCl7dGhpcy5xdWV1ZVByb3BlcnR5KEUsRC52YWx1ZSk7fX0sZ2V0Q29uZmlnOmZ1 bmN0aW9uKCl7dmFyIEQ9e30sRj10aGlzLmNvbmZpZyxHLEU7Zm9yKEcgaW4gRil7 aWYoQi5oYXNPd25Qcm9wZXJ0eShGLEcpKXtFPUZbR107aWYoRSYmRS5ldmVudCl7 RFtHXT1FLnZhbHVlO319fXJldHVybiBEO30sZ2V0UHJvcGVydHk6ZnVuY3Rpb24o RCl7dmFyIEU9dGhpcy5jb25maWdbRC50b0xvd2VyQ2FzZSgpXTtpZihFJiZFLmV2 ZW50KXtyZXR1cm4gRS52YWx1ZTt9ZWxzZXtyZXR1cm4gdW5kZWZpbmVkO319LHJl c2V0UHJvcGVydHk6ZnVuY3Rpb24oRCl7RD1ELnRvTG93ZXJDYXNlKCk7dmFyIEU9 dGhpcy5jb25maWdbRF07aWYoRSYmRS5ldmVudCl7aWYodGhpcy5pbml0aWFsQ29u ZmlnW0RdJiYhQi5pc1VuZGVmaW5lZCh0aGlzLmluaXRpYWxDb25maWdbRF0pKXt0 aGlzLnNldFByb3BlcnR5KEQsdGhpcy5pbml0aWFsQ29uZmlnW0RdKTtyZXR1cm4g dHJ1ZTt9fWVsc2V7cmV0dXJuIGZhbHNlO319LHNldFByb3BlcnR5OmZ1bmN0aW9u KEUsRyxEKXt2YXIgRjtFPUUudG9Mb3dlckNhc2UoKTtpZih0aGlzLnF1ZXVlSW5Q cm9ncmVzcyYmIUQpe3RoaXMucXVldWVQcm9wZXJ0eShFLEcpO3JldHVybiB0cnVl O31lbHNle0Y9dGhpcy5jb25maWdbRV07aWYoRiYmRi5ldmVudCl7aWYoRi52YWxp ZGF0b3ImJiFGLnZhbGlkYXRvcihHKSl7cmV0dXJuIGZhbHNlO31lbHNle0YudmFs dWU9RztpZighRCl7dGhpcy5maXJlRXZlbnQoRSxHKTt0aGlzLmNvbmZpZ0NoYW5n ZWRFdmVudC5maXJlKFtFLEddKTt9cmV0dXJuIHRydWU7fX1lbHNle3JldHVybiBm YWxzZTt9fX0scXVldWVQcm9wZXJ0eTpmdW5jdGlvbihTLFApe1M9Uy50b0xvd2Vy Q2FzZSgpO3ZhciBSPXRoaXMuY29uZmlnW1NdLEs9ZmFsc2UsSixHLEgsSSxPLFEs RixNLE4sRCxMLFQsRTtpZihSJiZSLmV2ZW50KXtpZighQi5pc1VuZGVmaW5lZChQ KSYmUi52YWxpZGF0b3ImJiFSLnZhbGlkYXRvcihQKSl7cmV0dXJuIGZhbHNlO31l bHNle2lmKCFCLmlzVW5kZWZpbmVkKFApKXtSLnZhbHVlPVA7fWVsc2V7UD1SLnZh bHVlO31LPWZhbHNlO0o9dGhpcy5ldmVudFF1ZXVlLmxlbmd0aDtmb3IoTD0wO0w8 SjtMKyspe0c9dGhpcy5ldmVudFF1ZXVlW0xdO2lmKEcpe0g9R1swXTtJPUdbMV07 aWYoSD09Uyl7dGhpcy5ldmVudFF1ZXVlW0xdPW51bGw7dGhpcy5ldmVudFF1ZXVl LnB1c2goW1MsKCFCLmlzVW5kZWZpbmVkKFApP1A6SSldKTtLPXRydWU7YnJlYWs7 fX19aWYoIUsmJiFCLmlzVW5kZWZpbmVkKFApKXt0aGlzLmV2ZW50UXVldWUucHVz aChbUyxQXSk7fX1pZihSLnN1cGVyY2VkZXMpe089Ui5zdXBlcmNlZGVzLmxlbmd0 aDtmb3IoVD0wO1Q8TztUKyspe1E9Ui5zdXBlcmNlZGVzW1RdO0Y9dGhpcy5ldmVu dFF1ZXVlLmxlbmd0aDtmb3IoRT0wO0U8RjtFKyspe009dGhpcy5ldmVudFF1ZXVl W0VdO2lmKE0pe049TVswXTtEPU1bMV07aWYoTj09US50b0xvd2VyQ2FzZSgpKXt0 aGlzLmV2ZW50UXVldWUucHVzaChbTixEXSk7dGhpcy5ldmVudFF1ZXVlW0VdPW51 bGw7YnJlYWs7fX19fX1yZXR1cm4gdHJ1ZTt9ZWxzZXtyZXR1cm4gZmFsc2U7fX0s cmVmaXJlRXZlbnQ6ZnVuY3Rpb24oRCl7RD1ELnRvTG93ZXJDYXNlKCk7dmFyIEU9 dGhpcy5jb25maWdbRF07aWYoRSYmRS5ldmVudCYmIUIuaXNVbmRlZmluZWQoRS52 YWx1ZSkpe2lmKHRoaXMucXVldWVJblByb2dyZXNzKXt0aGlzLnF1ZXVlUHJvcGVy dHkoRCk7fWVsc2V7dGhpcy5maXJlRXZlbnQoRCxFLnZhbHVlKTt9fX0sYXBwbHlD b25maWc6ZnVuY3Rpb24oRCxHKXt2YXIgRixFO2lmKEcpe0U9e307Zm9yKEYgaW4g RCl7aWYoQi5oYXNPd25Qcm9wZXJ0eShELEYpKXtFW0YudG9Mb3dlckNhc2UoKV09 RFtGXTt9fXRoaXMuaW5pdGlhbENvbmZpZz1FO31mb3IoRiBpbiBEKXtpZihCLmhh c093blByb3BlcnR5KEQsRikpe3RoaXMucXVldWVQcm9wZXJ0eShGLERbRl0pO319 fSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIEQ7Zm9yKEQgaW4gdGhpcy5jb25maWcp e2lmKEIuaGFzT3duUHJvcGVydHkodGhpcy5jb25maWcsRCkpe3RoaXMucmVmaXJl RXZlbnQoRCk7fX19LGZpcmVRdWV1ZTpmdW5jdGlvbigpe3ZhciBFLEgsRCxHLEY7 dGhpcy5xdWV1ZUluUHJvZ3Jlc3M9dHJ1ZTtmb3IoRT0wO0U8dGhpcy5ldmVudFF1 ZXVlLmxlbmd0aDtFKyspe0g9dGhpcy5ldmVudFF1ZXVlW0VdO2lmKEgpe0Q9SFsw XTtHPUhbMV07Rj10aGlzLmNvbmZpZ1tEXTtGLnZhbHVlPUc7dGhpcy5ldmVudFF1 ZXVlW0VdPW51bGw7dGhpcy5maXJlRXZlbnQoRCxHKTt9fXRoaXMucXVldWVJblBy b2dyZXNzPWZhbHNlO3RoaXMuZXZlbnRRdWV1ZT1bXTt9LHN1YnNjcmliZVRvQ29u ZmlnRXZlbnQ6ZnVuY3Rpb24oRSxGLEgsRCl7dmFyIEc9dGhpcy5jb25maWdbRS50 b0xvd2VyQ2FzZSgpXTtpZihHJiZHLmV2ZW50KXtpZighQS5hbHJlYWR5U3Vic2Ny aWJlZChHLmV2ZW50LEYsSCkpe0cuZXZlbnQuc3Vic2NyaWJlKEYsSCxEKTt9cmV0 dXJuIHRydWU7fWVsc2V7cmV0dXJuIGZhbHNlO319LHVuc3Vic2NyaWJlRnJvbUNv bmZpZ0V2ZW50OmZ1bmN0aW9uKEQsRSxHKXt2YXIgRj10aGlzLmNvbmZpZ1tELnRv TG93ZXJDYXNlKCldO2lmKEYmJkYuZXZlbnQpe3JldHVybiBGLmV2ZW50LnVuc3Vi c2NyaWJlKEUsRyk7fWVsc2V7cmV0dXJuIGZhbHNlO319LHRvU3RyaW5nOmZ1bmN0 aW9uKCl7dmFyIEQ9IkNvbmZpZyI7aWYodGhpcy5vd25lcil7RCs9IiBbIit0aGlz Lm93bmVyLnRvU3RyaW5nKCkrIl0iO31yZXR1cm4gRDt9LG91dHB1dEV2ZW50UXVl dWU6ZnVuY3Rpb24oKXt2YXIgRD0iIixHLEUsRj10aGlzLmV2ZW50UXVldWUubGVu Z3RoO2ZvcihFPTA7RTxGO0UrKyl7Rz10aGlzLmV2ZW50UXVldWVbRV07aWYoRyl7 RCs9R1swXSsiPSIrR1sxXSsiLCAiO319cmV0dXJuIEQ7fSxkZXN0cm95OmZ1bmN0 aW9uKCl7dmFyIEU9dGhpcy5jb25maWcsRCxGO2ZvcihEIGluIEUpe2lmKEIuaGFz T3duUHJvcGVydHkoRSxEKSl7Rj1FW0RdO0YuZXZlbnQudW5zdWJzY3JpYmVBbGwo KTtGLmV2ZW50PW51bGw7fX10aGlzLmNvbmZpZ0NoYW5nZWRFdmVudC51bnN1YnNj cmliZUFsbCgpO3RoaXMuY29uZmlnQ2hhbmdlZEV2ZW50PW51bGw7dGhpcy5vd25l cj1udWxsO3RoaXMuY29uZmlnPW51bGw7dGhpcy5pbml0aWFsQ29uZmlnPW51bGw7 dGhpcy5ldmVudFF1ZXVlPW51bGw7fX07QS5hbHJlYWR5U3Vic2NyaWJlZD1mdW5j dGlvbihFLEgsSSl7dmFyIEY9RS5zdWJzY3JpYmVycy5sZW5ndGgsRCxHO2lmKEY+ MCl7Rz1GLTE7ZG97RD1FLnN1YnNjcmliZXJzW0ddO2lmKEQmJkQub2JqPT1JJiZE LmZuPT1IKXtyZXR1cm4gdHJ1ZTt9fXdoaWxlKEctLSk7fXJldHVybiBmYWxzZTt9 O1lBSE9PLmxhbmcuYXVnbWVudFByb3RvKEEsWUFIT08udXRpbC5FdmVudFByb3Zp ZGVyKTt9KCkpOyhmdW5jdGlvbigpe1lBSE9PLndpZGdldC5Nb2R1bGU9ZnVuY3Rp b24oUixRKXtpZihSKXt0aGlzLmluaXQoUixRKTt9ZWxzZXt9fTt2YXIgRj1ZQUhP Ty51dGlsLkRvbSxEPVlBSE9PLnV0aWwuQ29uZmlnLE49WUFIT08udXRpbC5FdmVu dCxNPVlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQsRz1ZQUhPTy53aWRnZXQuTW9kdWxl LEk9WUFIT08uZW52LnVhLEgsUCxPLEUsQT17IkJFRk9SRV9JTklUIjoiYmVmb3Jl SW5pdCIsIklOSVQiOiJpbml0IiwiQVBQRU5EIjoiYXBwZW5kIiwiQkVGT1JFX1JF TkRFUiI6ImJlZm9yZVJlbmRlciIsIlJFTkRFUiI6InJlbmRlciIsIkNIQU5HRV9I RUFERVIiOiJjaGFuZ2VIZWFkZXIiLCJDSEFOR0VfQk9EWSI6ImNoYW5nZUJvZHki LCJDSEFOR0VfRk9PVEVSIjoiY2hhbmdlRm9vdGVyIiwiQ0hBTkdFX0NPTlRFTlQi OiJjaGFuZ2VDb250ZW50IiwiREVTVE9SWSI6ImRlc3Ryb3kiLCJCRUZPUkVfU0hP VyI6ImJlZm9yZVNob3ciLCJTSE9XIjoic2hvdyIsIkJFRk9SRV9ISURFIjoiYmVm b3JlSGlkZSIsIkhJREUiOiJoaWRlIn0sSj17IlZJU0lCTEUiOntrZXk6InZpc2li bGUiLHZhbHVlOnRydWUsdmFsaWRhdG9yOllBSE9PLmxhbmcuaXNCb29sZWFufSwi RUZGRUNUIjp7a2V5OiJlZmZlY3QiLHN1cHByZXNzRXZlbnQ6dHJ1ZSxzdXBlcmNl ZGVzOlsidmlzaWJsZSJdfSwiTU9OSVRPUl9SRVNJWkUiOntrZXk6Im1vbml0b3Jy ZXNpemUiLHZhbHVlOnRydWV9LCJBUFBFTkRfVE9fRE9DVU1FTlRfQk9EWSI6e2tl eToiYXBwZW5kdG9kb2N1bWVudGJvZHkiLHZhbHVlOmZhbHNlfX07Ry5JTUdfUk9P VD1udWxsO0cuSU1HX1JPT1RfU1NMPW51bGw7Ry5DU1NfTU9EVUxFPSJ5dWktbW9k dWxlIjtHLkNTU19IRUFERVI9ImhkIjtHLkNTU19CT0RZPSJiZCI7Ry5DU1NfRk9P VEVSPSJmdCI7Ry5SRVNJWkVfTU9OSVRPUl9TRUNVUkVfVVJMPSJqYXZhc2NyaXB0 OmZhbHNlOyI7Ry5SRVNJWkVfTU9OSVRPUl9CVUZGRVI9MTtHLnRleHRSZXNpemVF dmVudD1uZXcgTSgidGV4dFJlc2l6ZSIpO0cuZm9yY2VEb2N1bWVudFJlZHJhdz1m dW5jdGlvbigpe3ZhciBRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZihRKXtR LmNsYXNzTmFtZSs9IiAiO1EuY2xhc3NOYW1lPVlBSE9PLmxhbmcudHJpbShRLmNs YXNzTmFtZSk7fX07ZnVuY3Rpb24gTCgpe2lmKCFIKXtIPWRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoImRpdiIpO0guaW5uZXJIVE1MPSgnPGRpdiBjbGFzcz0iJytHLkNT U19IRUFERVIrJyI+PC9kaXY+JysnPGRpdiBjbGFzcz0iJytHLkNTU19CT0RZKyci PjwvZGl2PjxkaXYgY2xhc3M9IicrRy5DU1NfRk9PVEVSKyciPjwvZGl2PicpO1A9 SC5maXJzdENoaWxkO089UC5uZXh0U2libGluZztFPU8ubmV4dFNpYmxpbmc7fXJl dHVybiBIO31mdW5jdGlvbiBLKCl7aWYoIVApe0woKTt9cmV0dXJuKFAuY2xvbmVO b2RlKGZhbHNlKSk7fWZ1bmN0aW9uIEIoKXtpZighTyl7TCgpO31yZXR1cm4oTy5j bG9uZU5vZGUoZmFsc2UpKTt9ZnVuY3Rpb24gQygpe2lmKCFFKXtMKCk7fXJldHVy bihFLmNsb25lTm9kZShmYWxzZSkpO31HLnByb3RvdHlwZT17Y29uc3RydWN0b3I6 RyxlbGVtZW50Om51bGwsaGVhZGVyOm51bGwsYm9keTpudWxsLGZvb3RlcjpudWxs LGlkOm51bGwsaW1hZ2VSb290OkcuSU1HX1JPT1QsaW5pdEV2ZW50czpmdW5jdGlv bigpe3ZhciBRPU0uTElTVDt0aGlzLmJlZm9yZUluaXRFdmVudD10aGlzLmNyZWF0 ZUV2ZW50KEEuQkVGT1JFX0lOSVQpO3RoaXMuYmVmb3JlSW5pdEV2ZW50LnNpZ25h dHVyZT1RO3RoaXMuaW5pdEV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoQS5JTklUKTt0 aGlzLmluaXRFdmVudC5zaWduYXR1cmU9UTt0aGlzLmFwcGVuZEV2ZW50PXRoaXMu Y3JlYXRlRXZlbnQoQS5BUFBFTkQpO3RoaXMuYXBwZW5kRXZlbnQuc2lnbmF0dXJl PVE7dGhpcy5iZWZvcmVSZW5kZXJFdmVudD10aGlzLmNyZWF0ZUV2ZW50KEEuQkVG T1JFX1JFTkRFUik7dGhpcy5iZWZvcmVSZW5kZXJFdmVudC5zaWduYXR1cmU9UTt0 aGlzLnJlbmRlckV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoQS5SRU5ERVIpO3RoaXMu cmVuZGVyRXZlbnQuc2lnbmF0dXJlPVE7dGhpcy5jaGFuZ2VIZWFkZXJFdmVudD10 aGlzLmNyZWF0ZUV2ZW50KEEuQ0hBTkdFX0hFQURFUik7dGhpcy5jaGFuZ2VIZWFk ZXJFdmVudC5zaWduYXR1cmU9UTt0aGlzLmNoYW5nZUJvZHlFdmVudD10aGlzLmNy ZWF0ZUV2ZW50KEEuQ0hBTkdFX0JPRFkpO3RoaXMuY2hhbmdlQm9keUV2ZW50LnNp Z25hdHVyZT1RO3RoaXMuY2hhbmdlRm9vdGVyRXZlbnQ9dGhpcy5jcmVhdGVFdmVu dChBLkNIQU5HRV9GT09URVIpO3RoaXMuY2hhbmdlRm9vdGVyRXZlbnQuc2lnbmF0 dXJlPVE7dGhpcy5jaGFuZ2VDb250ZW50RXZlbnQ9dGhpcy5jcmVhdGVFdmVudChB LkNIQU5HRV9DT05URU5UKTt0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC5zaWduYXR1 cmU9UTt0aGlzLmRlc3Ryb3lFdmVudD10aGlzLmNyZWF0ZUV2ZW50KEEuREVTVE9S WSk7dGhpcy5kZXN0cm95RXZlbnQuc2lnbmF0dXJlPVE7dGhpcy5iZWZvcmVTaG93 RXZlbnQ9dGhpcy5jcmVhdGVFdmVudChBLkJFRk9SRV9TSE9XKTt0aGlzLmJlZm9y ZVNob3dFdmVudC5zaWduYXR1cmU9UTt0aGlzLnNob3dFdmVudD10aGlzLmNyZWF0 ZUV2ZW50KEEuU0hPVyk7dGhpcy5zaG93RXZlbnQuc2lnbmF0dXJlPVE7dGhpcy5i ZWZvcmVIaWRlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudChBLkJFRk9SRV9ISURFKTt0 aGlzLmJlZm9yZUhpZGVFdmVudC5zaWduYXR1cmU9UTt0aGlzLmhpZGVFdmVudD10 aGlzLmNyZWF0ZUV2ZW50KEEuSElERSk7dGhpcy5oaWRlRXZlbnQuc2lnbmF0dXJl PVE7fSxwbGF0Zm9ybTpmdW5jdGlvbigpe3ZhciBRPW5hdmlnYXRvci51c2VyQWdl bnQudG9Mb3dlckNhc2UoKTtpZihRLmluZGV4T2YoIndpbmRvd3MiKSE9LTF8fFEu aW5kZXhPZigid2luMzIiKSE9LTEpe3JldHVybiJ3aW5kb3dzIjt9ZWxzZXtpZihR LmluZGV4T2YoIm1hY2ludG9zaCIpIT0tMSl7cmV0dXJuIm1hYyI7fWVsc2V7cmV0 dXJuIGZhbHNlO319fSgpLGJyb3dzZXI6ZnVuY3Rpb24oKXt2YXIgUT1uYXZpZ2F0 b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7aWYoUS5pbmRleE9mKCJvcGVyYSIp IT0tMSl7cmV0dXJuIm9wZXJhIjt9ZWxzZXtpZihRLmluZGV4T2YoIm1zaWUgNyIp IT0tMSl7cmV0dXJuImllNyI7fWVsc2V7aWYoUS5pbmRleE9mKCJtc2llIikhPS0x KXtyZXR1cm4iaWUiO31lbHNle2lmKFEuaW5kZXhPZigic2FmYXJpIikhPS0xKXty ZXR1cm4ic2FmYXJpIjt9ZWxzZXtpZihRLmluZGV4T2YoImdlY2tvIikhPS0xKXty ZXR1cm4iZ2Vja28iO31lbHNle3JldHVybiBmYWxzZTt9fX19fX0oKSxpc1NlY3Vy ZTpmdW5jdGlvbigpe2lmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNl KCkuaW5kZXhPZigiaHR0cHMiKT09PTApe3JldHVybiB0cnVlO31lbHNle3JldHVy biBmYWxzZTt9fSgpLGluaXREZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7dGhpcy5j ZmcuYWRkUHJvcGVydHkoSi5WSVNJQkxFLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZp Z1Zpc2libGUsdmFsdWU6Si5WSVNJQkxFLnZhbHVlLHZhbGlkYXRvcjpKLlZJU0lC TEUudmFsaWRhdG9yfSk7dGhpcy5jZmcuYWRkUHJvcGVydHkoSi5FRkZFQ1Qua2V5 LHtzdXBwcmVzc0V2ZW50OkouRUZGRUNULnN1cHByZXNzRXZlbnQsc3VwZXJjZWRl czpKLkVGRkVDVC5zdXBlcmNlZGVzfSk7dGhpcy5jZmcuYWRkUHJvcGVydHkoSi5N T05JVE9SX1JFU0laRS5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdNb25pdG9yUmVz aXplLHZhbHVlOkouTU9OSVRPUl9SRVNJWkUudmFsdWV9KTt0aGlzLmNmZy5hZGRQ cm9wZXJ0eShKLkFQUEVORF9UT19ET0NVTUVOVF9CT0RZLmtleSx7dmFsdWU6Si5B UFBFTkRfVE9fRE9DVU1FTlRfQk9EWS52YWx1ZX0pO30saW5pdDpmdW5jdGlvbihW LFUpe3ZhciBTLFc7dGhpcy5pbml0RXZlbnRzKCk7dGhpcy5iZWZvcmVJbml0RXZl bnQuZmlyZShHKTt0aGlzLmNmZz1uZXcgRCh0aGlzKTtpZih0aGlzLmlzU2VjdXJl KXt0aGlzLmltYWdlUm9vdD1HLklNR19ST09UX1NTTDt9aWYodHlwZW9mIFY9PSJz dHJpbmciKXtTPVY7Vj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChWKTtpZighVil7 Vj0oTCgpKS5jbG9uZU5vZGUoZmFsc2UpO1YuaWQ9Uzt9fXRoaXMuaWQ9Ri5nZW5l cmF0ZUlkKFYpO3RoaXMuZWxlbWVudD1WO1c9dGhpcy5lbGVtZW50LmZpcnN0Q2hp bGQ7aWYoVyl7dmFyIFI9ZmFsc2UsUT1mYWxzZSxUPWZhbHNlO2Rve2lmKDE9PVcu bm9kZVR5cGUpe2lmKCFSJiZGLmhhc0NsYXNzKFcsRy5DU1NfSEVBREVSKSl7dGhp cy5oZWFkZXI9VztSPXRydWU7fWVsc2V7aWYoIVEmJkYuaGFzQ2xhc3MoVyxHLkNT U19CT0RZKSl7dGhpcy5ib2R5PVc7UT10cnVlO31lbHNle2lmKCFUJiZGLmhhc0Ns YXNzKFcsRy5DU1NfRk9PVEVSKSl7dGhpcy5mb290ZXI9VztUPXRydWU7fX19fX13 aGlsZSgoVz1XLm5leHRTaWJsaW5nKSk7fXRoaXMuaW5pdERlZmF1bHRDb25maWco KTtGLmFkZENsYXNzKHRoaXMuZWxlbWVudCxHLkNTU19NT0RVTEUpO2lmKFUpe3Ro aXMuY2ZnLmFwcGx5Q29uZmlnKFUsdHJ1ZSk7fWlmKCFELmFscmVhZHlTdWJzY3Jp YmVkKHRoaXMucmVuZGVyRXZlbnQsdGhpcy5jZmcuZmlyZVF1ZXVlLHRoaXMuY2Zn KSl7dGhpcy5yZW5kZXJFdmVudC5zdWJzY3JpYmUodGhpcy5jZmcuZmlyZVF1ZXVl LHRoaXMuY2ZnLHRydWUpO310aGlzLmluaXRFdmVudC5maXJlKEcpO30saW5pdFJl c2l6ZU1vbml0b3I6ZnVuY3Rpb24oKXt2YXIgUj0oSS5nZWNrbyYmdGhpcy5wbGF0 Zm9ybT09IndpbmRvd3MiKTtpZihSKXt2YXIgUT10aGlzO3NldFRpbWVvdXQoZnVu Y3Rpb24oKXtRLl9pbml0UmVzaXplTW9uaXRvcigpO30sMCk7fWVsc2V7dGhpcy5f aW5pdFJlc2l6ZU1vbml0b3IoKTt9fSxfaW5pdFJlc2l6ZU1vbml0b3I6ZnVuY3Rp b24oKXt2YXIgUSxTLFU7ZnVuY3Rpb24gVygpe0cudGV4dFJlc2l6ZUV2ZW50LmZp cmUoKTt9aWYoIUkub3BlcmEpe1M9Ri5nZXQoIl95dWlSZXNpemVNb25pdG9yIik7 dmFyIFY9dGhpcy5fc3VwcG9ydHNDV1Jlc2l6ZSgpO2lmKCFTKXtTPWRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2lmKHRoaXMuaXNTZWN1cmUmJkcuUkVT SVpFX01PTklUT1JfU0VDVVJFX1VSTCYmSS5pZSl7Uy5zcmM9Ry5SRVNJWkVfTU9O SVRPUl9TRUNVUkVfVVJMO31pZighVil7VT1bIjxodG1sPjxoZWFkPjxzY3JpcHQg IiwndHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nLCJ3aW5kb3cub25yZXNpemU9ZnVu Y3Rpb24oKXt3aW5kb3cucGFyZW50LiIsIllBSE9PLndpZGdldC5Nb2R1bGUudGV4 dFJlc2l6ZUV2ZW50LiIsImZpcmUoKTt9OzwiLCIvc2NyaXB0PjwvaGVhZD4iLCI8 Ym9keT48L2JvZHk+PC9odG1sPiJdLmpvaW4oIiIpO1Muc3JjPSJkYXRhOnRleHQv aHRtbDtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KFUpO31TLmlk PSJfeXVpUmVzaXplTW9uaXRvciI7Uy50aXRsZT0iVGV4dCBSZXNpemUgTW9uaXRv ciI7Uy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO1Muc3R5bGUudmlzaWJpbGl0 eT0iaGlkZGVuIjt2YXIgUj1kb2N1bWVudC5ib2R5LFQ9Ui5maXJzdENoaWxkO2lm KFQpe1IuaW5zZXJ0QmVmb3JlKFMsVCk7fWVsc2V7Ui5hcHBlbmRDaGlsZChTKTt9 Uy5zdHlsZS53aWR0aD0iMmVtIjtTLnN0eWxlLmhlaWdodD0iMmVtIjtTLnN0eWxl LnRvcD0oLTEqKFMub2Zmc2V0SGVpZ2h0K0cuUkVTSVpFX01PTklUT1JfQlVGRkVS KSkrInB4IjtTLnN0eWxlLmxlZnQ9IjAiO1Muc3R5bGUuYm9yZGVyV2lkdGg9IjAi O1Muc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSI7aWYoSS53ZWJraXQpe1E9Uy5j b250ZW50V2luZG93LmRvY3VtZW50O1Eub3BlbigpO1EuY2xvc2UoKTt9fWlmKFMm JlMuY29udGVudFdpbmRvdyl7Ry50ZXh0UmVzaXplRXZlbnQuc3Vic2NyaWJlKHRo aXMub25Eb21SZXNpemUsdGhpcyx0cnVlKTtpZighRy50ZXh0UmVzaXplSW5pdGlh bGl6ZWQpe2lmKFYpe2lmKCFOLm9uKFMuY29udGVudFdpbmRvdywicmVzaXplIixX KSl7Ti5vbihTLCJyZXNpemUiLFcpO319Ry50ZXh0UmVzaXplSW5pdGlhbGl6ZWQ9 dHJ1ZTt9dGhpcy5yZXNpemVNb25pdG9yPVM7fX19LF9zdXBwb3J0c0NXUmVzaXpl OmZ1bmN0aW9uKCl7dmFyIFE9dHJ1ZTtpZihJLmdlY2tvJiZJLmdlY2tvPD0xLjgp e1E9ZmFsc2U7fXJldHVybiBRO30sb25Eb21SZXNpemU6ZnVuY3Rpb24oUyxSKXt2 YXIgUT0tMSoodGhpcy5yZXNpemVNb25pdG9yLm9mZnNldEhlaWdodCtHLlJFU0la RV9NT05JVE9SX0JVRkZFUik7dGhpcy5yZXNpemVNb25pdG9yLnN0eWxlLnRvcD1R KyJweCI7dGhpcy5yZXNpemVNb25pdG9yLnN0eWxlLmxlZnQ9IjAiO30sc2V0SGVh ZGVyOmZ1bmN0aW9uKFIpe3ZhciBRPXRoaXMuaGVhZGVyfHwodGhpcy5oZWFkZXI9 SygpKTtpZihSLm5vZGVOYW1lKXtRLmlubmVySFRNTD0iIjtRLmFwcGVuZENoaWxk KFIpO31lbHNle1EuaW5uZXJIVE1MPVI7fXRoaXMuY2hhbmdlSGVhZGVyRXZlbnQu ZmlyZShSKTt0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC5maXJlKCk7fSxhcHBlbmRU b0hlYWRlcjpmdW5jdGlvbihSKXt2YXIgUT10aGlzLmhlYWRlcnx8KHRoaXMuaGVh ZGVyPUsoKSk7US5hcHBlbmRDaGlsZChSKTt0aGlzLmNoYW5nZUhlYWRlckV2ZW50 LmZpcmUoUik7dGhpcy5jaGFuZ2VDb250ZW50RXZlbnQuZmlyZSgpO30sc2V0Qm9k eTpmdW5jdGlvbihSKXt2YXIgUT10aGlzLmJvZHl8fCh0aGlzLmJvZHk9QigpKTtp ZihSLm5vZGVOYW1lKXtRLmlubmVySFRNTD0iIjtRLmFwcGVuZENoaWxkKFIpO31l bHNle1EuaW5uZXJIVE1MPVI7fXRoaXMuY2hhbmdlQm9keUV2ZW50LmZpcmUoUik7 dGhpcy5jaGFuZ2VDb250ZW50RXZlbnQuZmlyZSgpO30sYXBwZW5kVG9Cb2R5OmZ1 bmN0aW9uKFIpe3ZhciBRPXRoaXMuYm9keXx8KHRoaXMuYm9keT1CKCkpO1EuYXBw ZW5kQ2hpbGQoUik7dGhpcy5jaGFuZ2VCb2R5RXZlbnQuZmlyZShSKTt0aGlzLmNo YW5nZUNvbnRlbnRFdmVudC5maXJlKCk7fSxzZXRGb290ZXI6ZnVuY3Rpb24oUil7 dmFyIFE9dGhpcy5mb290ZXJ8fCh0aGlzLmZvb3Rlcj1DKCkpO2lmKFIubm9kZU5h bWUpe1EuaW5uZXJIVE1MPSIiO1EuYXBwZW5kQ2hpbGQoUik7fWVsc2V7US5pbm5l ckhUTUw9Ujt9dGhpcy5jaGFuZ2VGb290ZXJFdmVudC5maXJlKFIpO3RoaXMuY2hh bmdlQ29udGVudEV2ZW50LmZpcmUoKTt9LGFwcGVuZFRvRm9vdGVyOmZ1bmN0aW9u KFIpe3ZhciBRPXRoaXMuZm9vdGVyfHwodGhpcy5mb290ZXI9QygpKTtRLmFwcGVu ZENoaWxkKFIpO3RoaXMuY2hhbmdlRm9vdGVyRXZlbnQuZmlyZShSKTt0aGlzLmNo YW5nZUNvbnRlbnRFdmVudC5maXJlKCk7fSxyZW5kZXI6ZnVuY3Rpb24oUyxRKXt2 YXIgVD10aGlzLFU7ZnVuY3Rpb24gUihWKXtpZih0eXBlb2YgVj09InN0cmluZyIp e1Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVik7fWlmKFYpe1QuX2FkZFRvUGFy ZW50KFYsVC5lbGVtZW50KTtULmFwcGVuZEV2ZW50LmZpcmUoKTt9fXRoaXMuYmVm b3JlUmVuZGVyRXZlbnQuZmlyZSgpO2lmKCFRKXtRPXRoaXMuZWxlbWVudDt9aWYo Uyl7UihTKTt9ZWxzZXtpZighRi5pbkRvY3VtZW50KHRoaXMuZWxlbWVudCkpe3Jl dHVybiBmYWxzZTt9fWlmKHRoaXMuaGVhZGVyJiYhRi5pbkRvY3VtZW50KHRoaXMu aGVhZGVyKSl7VT1RLmZpcnN0Q2hpbGQ7aWYoVSl7US5pbnNlcnRCZWZvcmUodGhp cy5oZWFkZXIsVSk7fWVsc2V7US5hcHBlbmRDaGlsZCh0aGlzLmhlYWRlcik7fX1p Zih0aGlzLmJvZHkmJiFGLmluRG9jdW1lbnQodGhpcy5ib2R5KSl7aWYodGhpcy5m b290ZXImJkYuaXNBbmNlc3Rvcih0aGlzLm1vZHVsZUVsZW1lbnQsdGhpcy5mb290 ZXIpKXtRLmluc2VydEJlZm9yZSh0aGlzLmJvZHksdGhpcy5mb290ZXIpO31lbHNl e1EuYXBwZW5kQ2hpbGQodGhpcy5ib2R5KTt9fWlmKHRoaXMuZm9vdGVyJiYhRi5p bkRvY3VtZW50KHRoaXMuZm9vdGVyKSl7US5hcHBlbmRDaGlsZCh0aGlzLmZvb3Rl cik7fXRoaXMucmVuZGVyRXZlbnQuZmlyZSgpO3JldHVybiB0cnVlO30sZGVzdHJv eTpmdW5jdGlvbigpe3ZhciBRO2lmKHRoaXMuZWxlbWVudCl7Ti5wdXJnZUVsZW1l bnQodGhpcy5lbGVtZW50LHRydWUpO1E9dGhpcy5lbGVtZW50LnBhcmVudE5vZGU7 fWlmKFEpe1EucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTt9dGhpcy5lbGVtZW50 PW51bGw7dGhpcy5oZWFkZXI9bnVsbDt0aGlzLmJvZHk9bnVsbDt0aGlzLmZvb3Rl cj1udWxsO0cudGV4dFJlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMub25Eb21S ZXNpemUsdGhpcyk7dGhpcy5jZmcuZGVzdHJveSgpO3RoaXMuY2ZnPW51bGw7dGhp cy5kZXN0cm95RXZlbnQuZmlyZSgpO30sc2hvdzpmdW5jdGlvbigpe3RoaXMuY2Zn LnNldFByb3BlcnR5KCJ2aXNpYmxlIix0cnVlKTt9LGhpZGU6ZnVuY3Rpb24oKXt0 aGlzLmNmZy5zZXRQcm9wZXJ0eSgidmlzaWJsZSIsZmFsc2UpO30sY29uZmlnVmlz aWJsZTpmdW5jdGlvbihSLFEsUyl7dmFyIFQ9UVswXTtpZihUKXt0aGlzLmJlZm9y ZVNob3dFdmVudC5maXJlKCk7Ri5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsImRpc3Bs YXkiLCJibG9jayIpO3RoaXMuc2hvd0V2ZW50LmZpcmUoKTt9ZWxzZXt0aGlzLmJl Zm9yZUhpZGVFdmVudC5maXJlKCk7Ri5zZXRTdHlsZSh0aGlzLmVsZW1lbnQsImRp c3BsYXkiLCJub25lIik7dGhpcy5oaWRlRXZlbnQuZmlyZSgpO319LGNvbmZpZ01v bml0b3JSZXNpemU6ZnVuY3Rpb24oUyxSLFQpe3ZhciBRPVJbMF07aWYoUSl7dGhp cy5pbml0UmVzaXplTW9uaXRvcigpO31lbHNle0cudGV4dFJlc2l6ZUV2ZW50LnVu c3Vic2NyaWJlKHRoaXMub25Eb21SZXNpemUsdGhpcyx0cnVlKTt0aGlzLnJlc2l6 ZU1vbml0b3I9bnVsbDt9fSxfYWRkVG9QYXJlbnQ6ZnVuY3Rpb24oUSxSKXtpZigh dGhpcy5jZmcuZ2V0UHJvcGVydHkoImFwcGVuZHRvZG9jdW1lbnRib2R5IikmJlE9 PT1kb2N1bWVudC5ib2R5JiZRLmZpcnN0Q2hpbGQpe1EuaW5zZXJ0QmVmb3JlKFIs US5maXJzdENoaWxkKTt9ZWxzZXtRLmFwcGVuZENoaWxkKFIpO319LHRvU3RyaW5n OmZ1bmN0aW9uKCl7cmV0dXJuIk1vZHVsZSAiK3RoaXMuaWQ7fX07WUFIT08ubGFu Zy5hdWdtZW50UHJvdG8oRyxZQUhPTy51dGlsLkV2ZW50UHJvdmlkZXIpO30oKSk7 KGZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0Lk92ZXJsYXk9ZnVuY3Rpb24oUCxPKXtZ QUhPTy53aWRnZXQuT3ZlcmxheS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwo dGhpcyxQLE8pO307dmFyIEk9WUFIT08ubGFuZyxNPVlBSE9PLnV0aWwuQ3VzdG9t RXZlbnQsRz1ZQUhPTy53aWRnZXQuTW9kdWxlLE49WUFIT08udXRpbC5FdmVudCxG PVlBSE9PLnV0aWwuRG9tLEQ9WUFIT08udXRpbC5Db25maWcsSz1ZQUhPTy5lbnYu dWEsQj1ZQUhPTy53aWRnZXQuT3ZlcmxheSxIPSJzdWJzY3JpYmUiLEU9InVuc3Vi c2NyaWJlIixDPSJjb250YWluZWQiLEosQT17IkJFRk9SRV9NT1ZFIjoiYmVmb3Jl TW92ZSIsIk1PVkUiOiJtb3ZlIn0sTD17IlgiOntrZXk6IngiLHZhbGlkYXRvcjpJ LmlzTnVtYmVyLHN1cHByZXNzRXZlbnQ6dHJ1ZSxzdXBlcmNlZGVzOlsiaWZyYW1l Il19LCJZIjp7a2V5OiJ5Iix2YWxpZGF0b3I6SS5pc051bWJlcixzdXBwcmVzc0V2 ZW50OnRydWUsc3VwZXJjZWRlczpbImlmcmFtZSJdfSwiWFkiOntrZXk6Inh5Iixz dXBwcmVzc0V2ZW50OnRydWUsc3VwZXJjZWRlczpbImlmcmFtZSJdfSwiQ09OVEVY VCI6e2tleToiY29udGV4dCIsc3VwcHJlc3NFdmVudDp0cnVlLHN1cGVyY2VkZXM6 WyJpZnJhbWUiXX0sIkZJWEVEX0NFTlRFUiI6e2tleToiZml4ZWRjZW50ZXIiLHZh bHVlOmZhbHNlLHN1cGVyY2VkZXM6WyJpZnJhbWUiLCJ2aXNpYmxlIl19LCJXSURU SCI6e2tleToid2lkdGgiLHN1cHByZXNzRXZlbnQ6dHJ1ZSxzdXBlcmNlZGVzOlsi Y29udGV4dCIsImZpeGVkY2VudGVyIiwiaWZyYW1lIl19LCJIRUlHSFQiOntrZXk6 ImhlaWdodCIsc3VwcHJlc3NFdmVudDp0cnVlLHN1cGVyY2VkZXM6WyJjb250ZXh0 IiwiZml4ZWRjZW50ZXIiLCJpZnJhbWUiXX0sIkFVVE9fRklMTF9IRUlHSFQiOntr ZXk6ImF1dG9maWxsaGVpZ2h0IixzdXBlcmNlZGVzOlsiaGVpZ2h0Il0sdmFsdWU6 ImJvZHkifSwiWklOREVYIjp7a2V5OiJ6aW5kZXgiLHZhbHVlOm51bGx9LCJDT05T VFJBSU5fVE9fVklFV1BPUlQiOntrZXk6ImNvbnN0cmFpbnRvdmlld3BvcnQiLHZh bHVlOmZhbHNlLHZhbGlkYXRvcjpJLmlzQm9vbGVhbixzdXBlcmNlZGVzOlsiaWZy YW1lIiwieCIsInkiLCJ4eSJdfSwiSUZSQU1FIjp7a2V5OiJpZnJhbWUiLHZhbHVl OihLLmllPT02P3RydWU6ZmFsc2UpLHZhbGlkYXRvcjpJLmlzQm9vbGVhbixzdXBl cmNlZGVzOlsiemluZGV4Il19LCJQUkVWRU5UX0NPTlRFWFRfT1ZFUkxBUCI6e2tl eToicHJldmVudGNvbnRleHRvdmVybGFwIix2YWx1ZTpmYWxzZSx2YWxpZGF0b3I6 SS5pc0Jvb2xlYW4sc3VwZXJjZWRlczpbImNvbnN0cmFpbnRvdmlld3BvcnQiXX19 O0IuSUZSQU1FX1NSQz0iamF2YXNjcmlwdDpmYWxzZTsiO0IuSUZSQU1FX09GRlNF VD0zO0IuVklFV1BPUlRfT0ZGU0VUPTEwO0IuVE9QX0xFRlQ9InRsIjtCLlRPUF9S SUdIVD0idHIiO0IuQk9UVE9NX0xFRlQ9ImJsIjtCLkJPVFRPTV9SSUdIVD0iYnIi O0IuQ1NTX09WRVJMQVk9Inl1aS1vdmVybGF5IjtCLlNURF9NT0RfUkU9L15ccyo/ KGJvZHl8Zm9vdGVyfGhlYWRlcilccyo/JC9pO0Iud2luZG93U2Nyb2xsRXZlbnQ9 bmV3IE0oIndpbmRvd1Njcm9sbCIpO0Iud2luZG93UmVzaXplRXZlbnQ9bmV3IE0o IndpbmRvd1Jlc2l6ZSIpO0Iud2luZG93U2Nyb2xsSGFuZGxlcj1mdW5jdGlvbihQ KXt2YXIgTz1OLmdldFRhcmdldChQKTtpZighT3x8Tz09PXdpbmRvd3x8Tz09PXdp bmRvdy5kb2N1bWVudCl7aWYoSy5pZSl7aWYoIXdpbmRvdy5zY3JvbGxFbmQpe3dp bmRvdy5zY3JvbGxFbmQ9LTE7fWNsZWFyVGltZW91dCh3aW5kb3cuc2Nyb2xsRW5k KTt3aW5kb3cuc2Nyb2xsRW5kPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtCLndpbmRv d1Njcm9sbEV2ZW50LmZpcmUoKTt9LDEpO31lbHNle0Iud2luZG93U2Nyb2xsRXZl bnQuZmlyZSgpO319fTtCLndpbmRvd1Jlc2l6ZUhhbmRsZXI9ZnVuY3Rpb24oTyl7 aWYoSy5pZSl7aWYoIXdpbmRvdy5yZXNpemVFbmQpe3dpbmRvdy5yZXNpemVFbmQ9 LTE7fWNsZWFyVGltZW91dCh3aW5kb3cucmVzaXplRW5kKTt3aW5kb3cucmVzaXpl RW5kPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtCLndpbmRvd1Jlc2l6ZUV2ZW50LmZp cmUoKTt9LDEwMCk7fWVsc2V7Qi53aW5kb3dSZXNpemVFdmVudC5maXJlKCk7fX07 Qi5faW5pdGlhbGl6ZWQ9bnVsbDtpZihCLl9pbml0aWFsaXplZD09PW51bGwpe04u b24od2luZG93LCJzY3JvbGwiLEIud2luZG93U2Nyb2xsSGFuZGxlcik7Ti5vbih3 aW5kb3csInJlc2l6ZSIsQi53aW5kb3dSZXNpemVIYW5kbGVyKTtCLl9pbml0aWFs aXplZD10cnVlO31CLl9UUklHR0VSX01BUD17IndpbmRvd1Njcm9sbCI6Qi53aW5k b3dTY3JvbGxFdmVudCwid2luZG93UmVzaXplIjpCLndpbmRvd1Jlc2l6ZUV2ZW50 LCJ0ZXh0UmVzaXplIjpHLnRleHRSZXNpemVFdmVudH07WUFIT08uZXh0ZW5kKEIs Ryx7Q09OVEVYVF9UUklHR0VSUzpbXSxpbml0OmZ1bmN0aW9uKFAsTyl7Qi5zdXBl cmNsYXNzLmluaXQuY2FsbCh0aGlzLFApO3RoaXMuYmVmb3JlSW5pdEV2ZW50LmZp cmUoQik7Ri5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsQi5DU1NfT1ZFUkxBWSk7aWYo Tyl7dGhpcy5jZmcuYXBwbHlDb25maWcoTyx0cnVlKTt9aWYodGhpcy5wbGF0Zm9y bT09Im1hYyImJksuZ2Vja28pe2lmKCFELmFscmVhZHlTdWJzY3JpYmVkKHRoaXMu c2hvd0V2ZW50LHRoaXMuc2hvd01hY0dlY2tvU2Nyb2xsYmFycyx0aGlzKSl7dGhp cy5zaG93RXZlbnQuc3Vic2NyaWJlKHRoaXMuc2hvd01hY0dlY2tvU2Nyb2xsYmFy cyx0aGlzLHRydWUpO31pZighRC5hbHJlYWR5U3Vic2NyaWJlZCh0aGlzLmhpZGVF dmVudCx0aGlzLmhpZGVNYWNHZWNrb1Njcm9sbGJhcnMsdGhpcykpe3RoaXMuaGlk ZUV2ZW50LnN1YnNjcmliZSh0aGlzLmhpZGVNYWNHZWNrb1Njcm9sbGJhcnMsdGhp cyx0cnVlKTt9fXRoaXMuaW5pdEV2ZW50LmZpcmUoQik7fSxpbml0RXZlbnRzOmZ1 bmN0aW9uKCl7Qi5zdXBlcmNsYXNzLmluaXRFdmVudHMuY2FsbCh0aGlzKTt2YXIg Tz1NLkxJU1Q7dGhpcy5iZWZvcmVNb3ZlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudChB LkJFRk9SRV9NT1ZFKTt0aGlzLmJlZm9yZU1vdmVFdmVudC5zaWduYXR1cmU9Tzt0 aGlzLm1vdmVFdmVudD10aGlzLmNyZWF0ZUV2ZW50KEEuTU9WRSk7dGhpcy5tb3Zl RXZlbnQuc2lnbmF0dXJlPU87fSxpbml0RGVmYXVsdENvbmZpZzpmdW5jdGlvbigp e0Iuc3VwZXJjbGFzcy5pbml0RGVmYXVsdENvbmZpZy5jYWxsKHRoaXMpO3ZhciBP PXRoaXMuY2ZnO08uYWRkUHJvcGVydHkoTC5YLmtleSx7aGFuZGxlcjp0aGlzLmNv bmZpZ1gsdmFsaWRhdG9yOkwuWC52YWxpZGF0b3Isc3VwcHJlc3NFdmVudDpMLlgu c3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOkwuWC5zdXBlcmNlZGVzfSk7Ty5hZGRQ cm9wZXJ0eShMLlkua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnWSx2YWxpZGF0b3I6 TC5ZLnZhbGlkYXRvcixzdXBwcmVzc0V2ZW50OkwuWS5zdXBwcmVzc0V2ZW50LHN1 cGVyY2VkZXM6TC5ZLnN1cGVyY2VkZXN9KTtPLmFkZFByb3BlcnR5KEwuWFkua2V5 LHtoYW5kbGVyOnRoaXMuY29uZmlnWFksc3VwcHJlc3NFdmVudDpMLlhZLnN1cHBy ZXNzRXZlbnQsc3VwZXJjZWRlczpMLlhZLnN1cGVyY2VkZXN9KTtPLmFkZFByb3Bl cnR5KEwuQ09OVEVYVC5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdDb250ZXh0LHN1 cHByZXNzRXZlbnQ6TC5DT05URVhULnN1cHByZXNzRXZlbnQsc3VwZXJjZWRlczpM LkNPTlRFWFQuc3VwZXJjZWRlc30pO08uYWRkUHJvcGVydHkoTC5GSVhFRF9DRU5U RVIua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnRml4ZWRDZW50ZXIsdmFsdWU6TC5G SVhFRF9DRU5URVIudmFsdWUsdmFsaWRhdG9yOkwuRklYRURfQ0VOVEVSLnZhbGlk YXRvcixzdXBlcmNlZGVzOkwuRklYRURfQ0VOVEVSLnN1cGVyY2VkZXN9KTtPLmFk ZFByb3BlcnR5KEwuV0lEVEgua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnV2lkdGgs c3VwcHJlc3NFdmVudDpMLldJRFRILnN1cHByZXNzRXZlbnQsc3VwZXJjZWRlczpM LldJRFRILnN1cGVyY2VkZXN9KTtPLmFkZFByb3BlcnR5KEwuSEVJR0hULmtleSx7 aGFuZGxlcjp0aGlzLmNvbmZpZ0hlaWdodCxzdXBwcmVzc0V2ZW50OkwuSEVJR0hU LnN1cHByZXNzRXZlbnQsc3VwZXJjZWRlczpMLkhFSUdIVC5zdXBlcmNlZGVzfSk7 Ty5hZGRQcm9wZXJ0eShMLkFVVE9fRklMTF9IRUlHSFQua2V5LHtoYW5kbGVyOnRo aXMuY29uZmlnQXV0b0ZpbGxIZWlnaHQsdmFsdWU6TC5BVVRPX0ZJTExfSEVJR0hU LnZhbHVlLHZhbGlkYXRvcjp0aGlzLl92YWxpZGF0ZUF1dG9GaWxsLHN1cGVyY2Vk ZXM6TC5BVVRPX0ZJTExfSEVJR0hULnN1cGVyY2VkZXN9KTtPLmFkZFByb3BlcnR5 KEwuWklOREVYLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ3pJbmRleCx2YWx1ZTpM LlpJTkRFWC52YWx1ZX0pO08uYWRkUHJvcGVydHkoTC5DT05TVFJBSU5fVE9fVklF V1BPUlQua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnQ29uc3RyYWluVG9WaWV3cG9y dCx2YWx1ZTpMLkNPTlNUUkFJTl9UT19WSUVXUE9SVC52YWx1ZSx2YWxpZGF0b3I6 TC5DT05TVFJBSU5fVE9fVklFV1BPUlQudmFsaWRhdG9yLHN1cGVyY2VkZXM6TC5D T05TVFJBSU5fVE9fVklFV1BPUlQuc3VwZXJjZWRlc30pO08uYWRkUHJvcGVydHko TC5JRlJBTUUua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnSWZyYW1lLHZhbHVlOkwu SUZSQU1FLnZhbHVlLHZhbGlkYXRvcjpMLklGUkFNRS52YWxpZGF0b3Isc3VwZXJj ZWRlczpMLklGUkFNRS5zdXBlcmNlZGVzfSk7Ty5hZGRQcm9wZXJ0eShMLlBSRVZF TlRfQ09OVEVYVF9PVkVSTEFQLmtleSx7dmFsdWU6TC5QUkVWRU5UX0NPTlRFWFRf T1ZFUkxBUC52YWx1ZSx2YWxpZGF0b3I6TC5QUkVWRU5UX0NPTlRFWFRfT1ZFUkxB UC52YWxpZGF0b3Isc3VwZXJjZWRlczpMLlBSRVZFTlRfQ09OVEVYVF9PVkVSTEFQ LnN1cGVyY2VkZXN9KTt9LG1vdmVUbzpmdW5jdGlvbihPLFApe3RoaXMuY2ZnLnNl dFByb3BlcnR5KCJ4eSIsW08sUF0pO30saGlkZU1hY0dlY2tvU2Nyb2xsYmFyczpm dW5jdGlvbigpe0YucmVwbGFjZUNsYXNzKHRoaXMuZWxlbWVudCwic2hvdy1zY3Jv bGxiYXJzIiwiaGlkZS1zY3JvbGxiYXJzIik7fSxzaG93TWFjR2Vja29TY3JvbGxi YXJzOmZ1bmN0aW9uKCl7Ri5yZXBsYWNlQ2xhc3ModGhpcy5lbGVtZW50LCJoaWRl LXNjcm9sbGJhcnMiLCJzaG93LXNjcm9sbGJhcnMiKTt9LF9zZXREb21WaXNpYmls aXR5OmZ1bmN0aW9uKE8pe0Yuc2V0U3R5bGUodGhpcy5lbGVtZW50LCJ2aXNpYmls aXR5IiwoTyk/InZpc2libGUiOiJoaWRkZW4iKTtpZihPKXtGLnJlbW92ZUNsYXNz KHRoaXMuZWxlbWVudCwieXVpLW92ZXJsYXktaGlkZGVuIik7fWVsc2V7Ri5hZGRD bGFzcyh0aGlzLmVsZW1lbnQsInl1aS1vdmVybGF5LWhpZGRlbiIpO319LGNvbmZp Z1Zpc2libGU6ZnVuY3Rpb24oUixPLFgpe3ZhciBRPU9bMF0sUz1GLmdldFN0eWxl KHRoaXMuZWxlbWVudCwidmlzaWJpbGl0eSIpLFk9dGhpcy5jZmcuZ2V0UHJvcGVy dHkoImVmZmVjdCIpLFY9W10sVT0odGhpcy5wbGF0Zm9ybT09Im1hYyImJksuZ2Vj a28pLGc9RC5hbHJlYWR5U3Vic2NyaWJlZCxXLFAsZixjLGIsYSxkLFosVDtpZihT PT0iaW5oZXJpdCIpe2Y9dGhpcy5lbGVtZW50LnBhcmVudE5vZGU7d2hpbGUoZi5u b2RlVHlwZSE9OSYmZi5ub2RlVHlwZSE9MTEpe1M9Ri5nZXRTdHlsZShmLCJ2aXNp YmlsaXR5Iik7aWYoUyE9ImluaGVyaXQiKXticmVhazt9Zj1mLnBhcmVudE5vZGU7 fWlmKFM9PSJpbmhlcml0Iil7Uz0idmlzaWJsZSI7fX1pZihZKXtpZihZIGluc3Rh bmNlb2YgQXJyYXkpe1o9WS5sZW5ndGg7Zm9yKGM9MDtjPFo7YysrKXtXPVlbY107 VltWLmxlbmd0aF09Vy5lZmZlY3QodGhpcyxXLmR1cmF0aW9uKTt9fWVsc2V7VltW Lmxlbmd0aF09WS5lZmZlY3QodGhpcyxZLmR1cmF0aW9uKTt9fWlmKFEpe2lmKFUp e3RoaXMuc2hvd01hY0dlY2tvU2Nyb2xsYmFycygpO31pZihZKXtpZihRKXtpZihT IT0idmlzaWJsZSJ8fFM9PT0iIil7dGhpcy5iZWZvcmVTaG93RXZlbnQuZmlyZSgp O1Q9Vi5sZW5ndGg7Zm9yKGI9MDtiPFQ7YisrKXtQPVZbYl07aWYoYj09PTAmJiFn KFAuYW5pbWF0ZUluQ29tcGxldGVFdmVudCx0aGlzLnNob3dFdmVudC5maXJlLHRo aXMuc2hvd0V2ZW50KSl7UC5hbmltYXRlSW5Db21wbGV0ZUV2ZW50LnN1YnNjcmli ZSh0aGlzLnNob3dFdmVudC5maXJlLHRoaXMuc2hvd0V2ZW50LHRydWUpO31QLmFu aW1hdGVJbigpO319fX1lbHNle2lmKFMhPSJ2aXNpYmxlInx8Uz09PSIiKXt0aGlz LmJlZm9yZVNob3dFdmVudC5maXJlKCk7dGhpcy5fc2V0RG9tVmlzaWJpbGl0eSh0 cnVlKTt0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7dGhpcy5zaG93RXZl bnQuZmlyZSgpO31lbHNle3RoaXMuX3NldERvbVZpc2liaWxpdHkodHJ1ZSk7fX19 ZWxzZXtpZihVKXt0aGlzLmhpZGVNYWNHZWNrb1Njcm9sbGJhcnMoKTt9aWYoWSl7 aWYoUz09InZpc2libGUiKXt0aGlzLmJlZm9yZUhpZGVFdmVudC5maXJlKCk7VD1W Lmxlbmd0aDtmb3IoYT0wO2E8VDthKyspe2Q9VlthXTtpZihhPT09MCYmIWcoZC5h bmltYXRlT3V0Q29tcGxldGVFdmVudCx0aGlzLmhpZGVFdmVudC5maXJlLHRoaXMu aGlkZUV2ZW50KSl7ZC5hbmltYXRlT3V0Q29tcGxldGVFdmVudC5zdWJzY3JpYmUo dGhpcy5oaWRlRXZlbnQuZmlyZSx0aGlzLmhpZGVFdmVudCx0cnVlKTt9ZC5hbmlt YXRlT3V0KCk7fX1lbHNle2lmKFM9PT0iIil7dGhpcy5fc2V0RG9tVmlzaWJpbGl0 eShmYWxzZSk7fX19ZWxzZXtpZihTPT0idmlzaWJsZSJ8fFM9PT0iIil7dGhpcy5i ZWZvcmVIaWRlRXZlbnQuZmlyZSgpO3RoaXMuX3NldERvbVZpc2liaWxpdHkoZmFs c2UpO3RoaXMuaGlkZUV2ZW50LmZpcmUoKTt9ZWxzZXt0aGlzLl9zZXREb21WaXNp YmlsaXR5KGZhbHNlKTt9fX19LGRvQ2VudGVyT25ET01FdmVudDpmdW5jdGlvbigp e3ZhciBPPXRoaXMuY2ZnLFA9Ty5nZXRQcm9wZXJ0eSgiZml4ZWRjZW50ZXIiKTtp ZihPLmdldFByb3BlcnR5KCJ2aXNpYmxlIikpe2lmKFAmJihQIT09Q3x8dGhpcy5m aXRzSW5WaWV3cG9ydCgpKSl7dGhpcy5jZW50ZXIoKTt9fX0sZml0c0luVmlld3Bv cnQ6ZnVuY3Rpb24oKXt2YXIgUz1CLlZJRVdQT1JUX09GRlNFVCxRPXRoaXMuZWxl bWVudCxUPVEub2Zmc2V0V2lkdGgsUj1RLm9mZnNldEhlaWdodCxPPUYuZ2V0Vmll d3BvcnRXaWR0aCgpLFA9Ri5nZXRWaWV3cG9ydEhlaWdodCgpO3JldHVybigoVCtT PE8pJiYoUitTPFApKTt9LGNvbmZpZ0ZpeGVkQ2VudGVyOmZ1bmN0aW9uKFMsUSxU KXt2YXIgVT1RWzBdLFA9RC5hbHJlYWR5U3Vic2NyaWJlZCxSPUIud2luZG93UmVz aXplRXZlbnQsTz1CLndpbmRvd1Njcm9sbEV2ZW50O2lmKFUpe3RoaXMuY2VudGVy KCk7aWYoIVAodGhpcy5iZWZvcmVTaG93RXZlbnQsdGhpcy5jZW50ZXIpKXt0aGlz LmJlZm9yZVNob3dFdmVudC5zdWJzY3JpYmUodGhpcy5jZW50ZXIpO31pZighUChS LHRoaXMuZG9DZW50ZXJPbkRPTUV2ZW50LHRoaXMpKXtSLnN1YnNjcmliZSh0aGlz LmRvQ2VudGVyT25ET01FdmVudCx0aGlzLHRydWUpO31pZighUChPLHRoaXMuZG9D ZW50ZXJPbkRPTUV2ZW50LHRoaXMpKXtPLnN1YnNjcmliZSh0aGlzLmRvQ2VudGVy T25ET01FdmVudCx0aGlzLHRydWUpO319ZWxzZXt0aGlzLmJlZm9yZVNob3dFdmVu dC51bnN1YnNjcmliZSh0aGlzLmNlbnRlcik7Ui51bnN1YnNjcmliZSh0aGlzLmRv Q2VudGVyT25ET01FdmVudCx0aGlzKTtPLnVuc3Vic2NyaWJlKHRoaXMuZG9DZW50 ZXJPbkRPTUV2ZW50LHRoaXMpO319LGNvbmZpZ0hlaWdodDpmdW5jdGlvbihSLFAs Uyl7dmFyIE89UFswXSxRPXRoaXMuZWxlbWVudDtGLnNldFN0eWxlKFEsImhlaWdo dCIsTyk7dGhpcy5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIpO30sY29uZmlnQXV0 b0ZpbGxIZWlnaHQ6ZnVuY3Rpb24oVCxTLFApe3ZhciBWPVNbMF0sUT10aGlzLmNm ZyxVPSJhdXRvZmlsbGhlaWdodCIsVz0iaGVpZ2h0IixSPVEuZ2V0UHJvcGVydHko VSksTz10aGlzLl9hdXRvRmlsbE9uSGVpZ2h0Q2hhbmdlO1EudW5zdWJzY3JpYmVG cm9tQ29uZmlnRXZlbnQoVyxPKTtHLnRleHRSZXNpemVFdmVudC51bnN1YnNjcmli ZShPKTt0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC51bnN1YnNjcmliZShPKTtpZihS JiZWIT09UiYmdGhpc1tSXSl7Ri5zZXRTdHlsZSh0aGlzW1JdLFcsIiIpO31pZihW KXtWPUkudHJpbShWLnRvTG93ZXJDYXNlKCkpO1Euc3Vic2NyaWJlVG9Db25maWdF dmVudChXLE8sdGhpc1tWXSx0aGlzKTtHLnRleHRSZXNpemVFdmVudC5zdWJzY3Jp YmUoTyx0aGlzW1ZdLHRoaXMpO3RoaXMuY2hhbmdlQ29udGVudEV2ZW50LnN1YnNj cmliZShPLHRoaXNbVl0sdGhpcyk7US5zZXRQcm9wZXJ0eShVLFYsdHJ1ZSk7fX0s Y29uZmlnV2lkdGg6ZnVuY3Rpb24oUixPLFMpe3ZhciBRPU9bMF0sUD10aGlzLmVs ZW1lbnQ7Ri5zZXRTdHlsZShQLCJ3aWR0aCIsUSk7dGhpcy5jZmcucmVmaXJlRXZl bnQoImlmcmFtZSIpO30sY29uZmlnekluZGV4OmZ1bmN0aW9uKFEsTyxSKXt2YXIg Uz1PWzBdLFA9dGhpcy5lbGVtZW50O2lmKCFTKXtTPUYuZ2V0U3R5bGUoUCwieklu ZGV4Iik7aWYoIVN8fGlzTmFOKFMpKXtTPTA7fX1pZih0aGlzLmlmcmFtZXx8dGhp cy5jZmcuZ2V0UHJvcGVydHkoImlmcmFtZSIpPT09dHJ1ZSl7aWYoUzw9MCl7Uz0x O319Ri5zZXRTdHlsZShQLCJ6SW5kZXgiLFMpO3RoaXMuY2ZnLnNldFByb3BlcnR5 KCJ6SW5kZXgiLFMsdHJ1ZSk7aWYodGhpcy5pZnJhbWUpe3RoaXMuc3RhY2tJZnJh bWUoKTt9fSxjb25maWdYWTpmdW5jdGlvbihRLFAsUil7dmFyIFQ9UFswXSxPPVRb MF0sUz1UWzFdO3RoaXMuY2ZnLnNldFByb3BlcnR5KCJ4IixPKTt0aGlzLmNmZy5z ZXRQcm9wZXJ0eSgieSIsUyk7dGhpcy5iZWZvcmVNb3ZlRXZlbnQuZmlyZShbTyxT XSk7Tz10aGlzLmNmZy5nZXRQcm9wZXJ0eSgieCIpO1M9dGhpcy5jZmcuZ2V0UHJv cGVydHkoInkiKTt0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7dGhpcy5t b3ZlRXZlbnQuZmlyZShbTyxTXSk7fSxjb25maWdYOmZ1bmN0aW9uKFEsUCxSKXt2 YXIgTz1QWzBdLFM9dGhpcy5jZmcuZ2V0UHJvcGVydHkoInkiKTt0aGlzLmNmZy5z ZXRQcm9wZXJ0eSgieCIsTyx0cnVlKTt0aGlzLmNmZy5zZXRQcm9wZXJ0eSgieSIs Uyx0cnVlKTt0aGlzLmJlZm9yZU1vdmVFdmVudC5maXJlKFtPLFNdKTtPPXRoaXMu Y2ZnLmdldFByb3BlcnR5KCJ4Iik7Uz10aGlzLmNmZy5nZXRQcm9wZXJ0eSgieSIp O0Yuc2V0WCh0aGlzLmVsZW1lbnQsTyx0cnVlKTt0aGlzLmNmZy5zZXRQcm9wZXJ0 eSgieHkiLFtPLFNdLHRydWUpO3RoaXMuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUi KTt0aGlzLm1vdmVFdmVudC5maXJlKFtPLFNdKTt9LGNvbmZpZ1k6ZnVuY3Rpb24o USxQLFIpe3ZhciBPPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJ4IiksUz1QWzBdO3Ro aXMuY2ZnLnNldFByb3BlcnR5KCJ4IixPLHRydWUpO3RoaXMuY2ZnLnNldFByb3Bl cnR5KCJ5IixTLHRydWUpO3RoaXMuYmVmb3JlTW92ZUV2ZW50LmZpcmUoW08sU10p O089dGhpcy5jZmcuZ2V0UHJvcGVydHkoIngiKTtTPXRoaXMuY2ZnLmdldFByb3Bl cnR5KCJ5Iik7Ri5zZXRZKHRoaXMuZWxlbWVudCxTLHRydWUpO3RoaXMuY2ZnLnNl dFByb3BlcnR5KCJ4eSIsW08sU10sdHJ1ZSk7dGhpcy5jZmcucmVmaXJlRXZlbnQo ImlmcmFtZSIpO3RoaXMubW92ZUV2ZW50LmZpcmUoW08sU10pO30sc2hvd0lmcmFt ZTpmdW5jdGlvbigpe3ZhciBQPXRoaXMuaWZyYW1lLE87aWYoUCl7Tz10aGlzLmVs ZW1lbnQucGFyZW50Tm9kZTtpZihPIT1QLnBhcmVudE5vZGUpe3RoaXMuX2FkZFRv UGFyZW50KE8sUCk7fVAuc3R5bGUuZGlzcGxheT0iYmxvY2siO319LGhpZGVJZnJh bWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlmcmFtZSl7dGhpcy5pZnJhbWUuc3R5bGUu ZGlzcGxheT0ibm9uZSI7fX0sc3luY0lmcmFtZTpmdW5jdGlvbigpe3ZhciBPPXRo aXMuaWZyYW1lLFE9dGhpcy5lbGVtZW50LFM9Qi5JRlJBTUVfT0ZGU0VULFA9KFMq MiksUjtpZihPKXtPLnN0eWxlLndpZHRoPShRLm9mZnNldFdpZHRoK1ArInB4Iik7 Ty5zdHlsZS5oZWlnaHQ9KFEub2Zmc2V0SGVpZ2h0K1ArInB4Iik7Uj10aGlzLmNm Zy5nZXRQcm9wZXJ0eSgieHkiKTtpZighSS5pc0FycmF5KFIpfHwoaXNOYU4oUlsw XSl8fGlzTmFOKFJbMV0pKSl7dGhpcy5zeW5jUG9zaXRpb24oKTtSPXRoaXMuY2Zn LmdldFByb3BlcnR5KCJ4eSIpO31GLnNldFhZKE8sWyhSWzBdLVMpLChSWzFdLVMp XSk7fX0sc3RhY2tJZnJhbWU6ZnVuY3Rpb24oKXtpZih0aGlzLmlmcmFtZSl7dmFy IE89Ri5nZXRTdHlsZSh0aGlzLmVsZW1lbnQsInpJbmRleCIpO2lmKCFZQUhPTy5s YW5nLmlzVW5kZWZpbmVkKE8pJiYhaXNOYU4oTykpe0Yuc2V0U3R5bGUodGhpcy5p ZnJhbWUsInpJbmRleCIsKE8tMSkpO319fSxjb25maWdJZnJhbWU6ZnVuY3Rpb24o UixRLFMpe3ZhciBPPVFbMF07ZnVuY3Rpb24gVCgpe3ZhciBWPXRoaXMuaWZyYW1l LFc9dGhpcy5lbGVtZW50LFg7aWYoIVYpe2lmKCFKKXtKPWRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoImlmcmFtZSIpO2lmKHRoaXMuaXNTZWN1cmUpe0ouc3JjPUIuSUZS QU1FX1NSQzt9aWYoSy5pZSl7Si5zdHlsZS5maWx0ZXI9ImFscGhhKG9wYWNpdHk9 MCkiO0ouZnJhbWVCb3JkZXI9MDt9ZWxzZXtKLnN0eWxlLm9wYWNpdHk9IjAiO31K LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Si5zdHlsZS5ib3JkZXI9Im5vbmUi O0ouc3R5bGUubWFyZ2luPSIwIjtKLnN0eWxlLnBhZGRpbmc9IjAiO0ouc3R5bGUu ZGlzcGxheT0ibm9uZSI7Si50YWJJbmRleD0tMTt9Vj1KLmNsb25lTm9kZShmYWxz ZSk7WD1XLnBhcmVudE5vZGU7dmFyIFU9WHx8ZG9jdW1lbnQuYm9keTt0aGlzLl9h ZGRUb1BhcmVudChVLFYpO3RoaXMuaWZyYW1lPVY7fXRoaXMuc2hvd0lmcmFtZSgp O3RoaXMuc3luY0lmcmFtZSgpO3RoaXMuc3RhY2tJZnJhbWUoKTtpZighdGhpcy5f aGFzSWZyYW1lRXZlbnRMaXN0ZW5lcnMpe3RoaXMuc2hvd0V2ZW50LnN1YnNjcmli ZSh0aGlzLnNob3dJZnJhbWUpO3RoaXMuaGlkZUV2ZW50LnN1YnNjcmliZSh0aGlz LmhpZGVJZnJhbWUpO3RoaXMuY2hhbmdlQ29udGVudEV2ZW50LnN1YnNjcmliZSh0 aGlzLnN5bmNJZnJhbWUpO3RoaXMuX2hhc0lmcmFtZUV2ZW50TGlzdGVuZXJzPXRy dWU7fX1mdW5jdGlvbiBQKCl7VC5jYWxsKHRoaXMpO3RoaXMuYmVmb3JlU2hvd0V2 ZW50LnVuc3Vic2NyaWJlKFApO3RoaXMuX2lmcmFtZURlZmVycmVkPWZhbHNlO31p ZihPKXtpZih0aGlzLmNmZy5nZXRQcm9wZXJ0eSgidmlzaWJsZSIpKXtULmNhbGwo dGhpcyk7fWVsc2V7aWYoIXRoaXMuX2lmcmFtZURlZmVycmVkKXt0aGlzLmJlZm9y ZVNob3dFdmVudC5zdWJzY3JpYmUoUCk7dGhpcy5faWZyYW1lRGVmZXJyZWQ9dHJ1 ZTt9fX1lbHNle3RoaXMuaGlkZUlmcmFtZSgpO2lmKHRoaXMuX2hhc0lmcmFtZUV2 ZW50TGlzdGVuZXJzKXt0aGlzLnNob3dFdmVudC51bnN1YnNjcmliZSh0aGlzLnNo b3dJZnJhbWUpO3RoaXMuaGlkZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuaGlkZUlm cmFtZSk7dGhpcy5jaGFuZ2VDb250ZW50RXZlbnQudW5zdWJzY3JpYmUodGhpcy5z eW5jSWZyYW1lKTt0aGlzLl9oYXNJZnJhbWVFdmVudExpc3RlbmVycz1mYWxzZTt9 fX0sX3ByaW1lWFlGcm9tRE9NOmZ1bmN0aW9uKCl7aWYoWUFIT08ubGFuZy5pc1Vu ZGVmaW5lZCh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgieHkiKSkpe3RoaXMuc3luY1Bv c2l0aW9uKCk7dGhpcy5jZmcucmVmaXJlRXZlbnQoInh5Iik7dGhpcy5iZWZvcmVT aG93RXZlbnQudW5zdWJzY3JpYmUodGhpcy5fcHJpbWVYWUZyb21ET00pO319LGNv bmZpZ0NvbnN0cmFpblRvVmlld3BvcnQ6ZnVuY3Rpb24oUCxPLFEpe3ZhciBSPU9b MF07aWYoUil7aWYoIUQuYWxyZWFkeVN1YnNjcmliZWQodGhpcy5iZWZvcmVNb3Zl RXZlbnQsdGhpcy5lbmZvcmNlQ29uc3RyYWludHMsdGhpcykpe3RoaXMuYmVmb3Jl TW92ZUV2ZW50LnN1YnNjcmliZSh0aGlzLmVuZm9yY2VDb25zdHJhaW50cyx0aGlz LHRydWUpO31pZighRC5hbHJlYWR5U3Vic2NyaWJlZCh0aGlzLmJlZm9yZVNob3dF dmVudCx0aGlzLl9wcmltZVhZRnJvbURPTSkpe3RoaXMuYmVmb3JlU2hvd0V2ZW50 LnN1YnNjcmliZSh0aGlzLl9wcmltZVhZRnJvbURPTSk7fX1lbHNle3RoaXMuYmVm b3JlU2hvd0V2ZW50LnVuc3Vic2NyaWJlKHRoaXMuX3ByaW1lWFlGcm9tRE9NKTt0 aGlzLmJlZm9yZU1vdmVFdmVudC51bnN1YnNjcmliZSh0aGlzLmVuZm9yY2VDb25z dHJhaW50cyx0aGlzKTt9fSxjb25maWdDb250ZXh0OmZ1bmN0aW9uKFQsUyxQKXt2 YXIgVz1TWzBdLFEsTyxVLFIsVj10aGlzLkNPTlRFWFRfVFJJR0dFUlM7aWYoVyl7 UT1XWzBdO089V1sxXTtVPVdbMl07Uj1XWzNdO2lmKFYmJlYubGVuZ3RoPjApe1I9 KFJ8fFtdKS5jb25jYXQoVik7fWlmKFEpe2lmKHR5cGVvZiBRPT0ic3RyaW5nIil7 dGhpcy5jZmcuc2V0UHJvcGVydHkoImNvbnRleHQiLFtkb2N1bWVudC5nZXRFbGVt ZW50QnlJZChRKSxPLFUsUl0sdHJ1ZSk7fWlmKE8mJlUpe3RoaXMuYWxpZ24oTyxV KTt9aWYodGhpcy5fY29udGV4dFRyaWdnZXJzKXt0aGlzLl9wcm9jZXNzVHJpZ2dl cnModGhpcy5fY29udGV4dFRyaWdnZXJzLEUsdGhpcy5fYWxpZ25PblRyaWdnZXIp O31pZihSKXt0aGlzLl9wcm9jZXNzVHJpZ2dlcnMoUixILHRoaXMuX2FsaWduT25U cmlnZ2VyKTt0aGlzLl9jb250ZXh0VHJpZ2dlcnM9Ujt9fX19LF9hbGlnbk9uVHJp Z2dlcjpmdW5jdGlvbihQLE8pe3RoaXMuYWxpZ24oKTt9LF9maW5kVHJpZ2dlckNF OmZ1bmN0aW9uKE8pe3ZhciBQPW51bGw7aWYoTyBpbnN0YW5jZW9mIE0pe1A9Tzt9 ZWxzZXtpZihCLl9UUklHR0VSX01BUFtPXSl7UD1CLl9UUklHR0VSX01BUFtPXTt9 fXJldHVybiBQO30sX3Byb2Nlc3NUcmlnZ2VyczpmdW5jdGlvbihTLFUsUil7dmFy IFEsVDtmb3IodmFyIFA9MCxPPVMubGVuZ3RoO1A8TzsrK1Ape1E9U1tQXTtUPXRo aXMuX2ZpbmRUcmlnZ2VyQ0UoUSk7aWYoVCl7VFtVXShSLHRoaXMsdHJ1ZSk7fWVs c2V7dGhpc1tVXShRLFIpO319fSxhbGlnbjpmdW5jdGlvbihQLE8pe3ZhciBVPXRo aXMuY2ZnLmdldFByb3BlcnR5KCJjb250ZXh0IiksVD10aGlzLFMsUixWO2Z1bmN0 aW9uIFEoVyxYKXtzd2l0Y2goUCl7Y2FzZSBCLlRPUF9MRUZUOlQubW92ZVRvKFgs Vyk7YnJlYWs7Y2FzZSBCLlRPUF9SSUdIVDpULm1vdmVUbygoWC1SLm9mZnNldFdp ZHRoKSxXKTticmVhaztjYXNlIEIuQk9UVE9NX0xFRlQ6VC5tb3ZlVG8oWCwoVy1S Lm9mZnNldEhlaWdodCkpO2JyZWFrO2Nhc2UgQi5CT1RUT01fUklHSFQ6VC5tb3Zl VG8oKFgtUi5vZmZzZXRXaWR0aCksKFctUi5vZmZzZXRIZWlnaHQpKTticmVhazt9 fWlmKFUpe1M9VVswXTtSPXRoaXMuZWxlbWVudDtUPXRoaXM7aWYoIVApe1A9VVsx XTt9aWYoIU8pe089VVsyXTt9aWYoUiYmUyl7Vj1GLmdldFJlZ2lvbihTKTtzd2l0 Y2goTyl7Y2FzZSBCLlRPUF9MRUZUOlEoVi50b3AsVi5sZWZ0KTticmVhaztjYXNl IEIuVE9QX1JJR0hUOlEoVi50b3AsVi5yaWdodCk7YnJlYWs7Y2FzZSBCLkJPVFRP TV9MRUZUOlEoVi5ib3R0b20sVi5sZWZ0KTticmVhaztjYXNlIEIuQk9UVE9NX1JJ R0hUOlEoVi5ib3R0b20sVi5yaWdodCk7YnJlYWs7fX19fSxlbmZvcmNlQ29uc3Ry YWludHM6ZnVuY3Rpb24oUCxPLFEpe3ZhciBTPU9bMF07dmFyIFI9dGhpcy5nZXRD b25zdHJhaW5lZFhZKFNbMF0sU1sxXSk7dGhpcy5jZmcuc2V0UHJvcGVydHkoIngi LFJbMF0sdHJ1ZSk7dGhpcy5jZmcuc2V0UHJvcGVydHkoInkiLFJbMV0sdHJ1ZSk7 dGhpcy5jZmcuc2V0UHJvcGVydHkoInh5IixSLHRydWUpO30sZ2V0Q29uc3RyYWlu ZWRYOmZ1bmN0aW9uKFYpe3ZhciBTPXRoaXMsTz1TLmVsZW1lbnQsZT1PLm9mZnNl dFdpZHRoLGM9Qi5WSUVXUE9SVF9PRkZTRVQsaD1GLmdldFZpZXdwb3J0V2lkdGgo KSxkPUYuZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KCksWT0oZStjPGgpLGI9dGhpcy5j ZmcuZ2V0UHJvcGVydHkoImNvbnRleHQiKSxRLFgsaixUPWZhbHNlLGYsVyxnPWQr YyxQPWQraC1lLWMsaT1WLFU9eyJ0bHRyIjp0cnVlLCJibGJyIjp0cnVlLCJicmJs Ijp0cnVlLCJ0cnRsIjp0cnVlfTt2YXIgWj1mdW5jdGlvbigpe3ZhciBrO2lmKChT LmNmZy5nZXRQcm9wZXJ0eSgieCIpLWQpPlgpe2s9KFgtZSk7fWVsc2V7az0oWCtq KTt9Uy5jZmcuc2V0UHJvcGVydHkoIngiLChrK2QpLHRydWUpO3JldHVybiBrO307 dmFyIFI9ZnVuY3Rpb24oKXtpZigoUy5jZmcuZ2V0UHJvcGVydHkoIngiKS1kKT5Y KXtyZXR1cm4oVy1jKTt9ZWxzZXtyZXR1cm4oZi1jKTt9fTt2YXIgYT1mdW5jdGlv bigpe3ZhciBrPVIoKSxsO2lmKGU+ayl7aWYoVCl7WigpO31lbHNle1ooKTtUPXRy dWU7bD1hKCk7fX1yZXR1cm4gbDt9O2lmKFY8Z3x8Vj5QKXtpZihZKXtpZih0aGlz LmNmZy5nZXRQcm9wZXJ0eSgicHJldmVudGNvbnRleHRvdmVybGFwIikmJmImJlVb KGJbMV0rYlsyXSldKXtRPWJbMF07WD1GLmdldFgoUSktZDtqPVEub2Zmc2V0V2lk dGg7Zj1YO1c9KGgtKFgraikpO2EoKTtpPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJ4 Iik7fWVsc2V7aWYoVjxnKXtpPWc7fWVsc2V7aWYoVj5QKXtpPVA7fX19fWVsc2V7 aT1jK2Q7fX1yZXR1cm4gaTt9LGdldENvbnN0cmFpbmVkWTpmdW5jdGlvbihaKXt2 YXIgVz10aGlzLFA9Vy5lbGVtZW50LGk9UC5vZmZzZXRIZWlnaHQsaD1CLlZJRVdQ T1JUX09GRlNFVCxkPUYuZ2V0Vmlld3BvcnRIZWlnaHQoKSxnPUYuZ2V0RG9jdW1l bnRTY3JvbGxUb3AoKSxlPShpK2g8ZCksZj10aGlzLmNmZy5nZXRQcm9wZXJ0eSgi Y29udGV4dCIpLFUsYSxiLFg9ZmFsc2UsVixRLGM9ZytoLFM9ZytkLWktaCxPPVos WT17InRyYnIiOnRydWUsInRsYmwiOnRydWUsImJsdGwiOnRydWUsImJydHIiOnRy dWV9O3ZhciBUPWZ1bmN0aW9uKCl7dmFyIGs7aWYoKFcuY2ZnLmdldFByb3BlcnR5 KCJ5IiktZyk+YSl7az0oYS1pKTt9ZWxzZXtrPShhK2IpO31XLmNmZy5zZXRQcm9w ZXJ0eSgieSIsKGsrZyksdHJ1ZSk7cmV0dXJuIGs7fTt2YXIgUj1mdW5jdGlvbigp e2lmKChXLmNmZy5nZXRQcm9wZXJ0eSgieSIpLWcpPmEpe3JldHVybihRLWgpO31l bHNle3JldHVybihWLWgpO319O3ZhciBqPWZ1bmN0aW9uKCl7dmFyIGw9UigpLGs7 aWYoaT5sKXtpZihYKXtUKCk7fWVsc2V7VCgpO1g9dHJ1ZTtrPWooKTt9fXJldHVy biBrO307aWYoWjxjfHxaPlMpe2lmKGUpe2lmKHRoaXMuY2ZnLmdldFByb3BlcnR5 KCJwcmV2ZW50Y29udGV4dG92ZXJsYXAiKSYmZiYmWVsoZlsxXStmWzJdKV0pe1U9 ZlswXTtiPVUub2Zmc2V0SGVpZ2h0O2E9KEYuZ2V0WShVKS1nKTtWPWE7UT0oZC0o YStiKSk7aigpO089Vy5jZmcuZ2V0UHJvcGVydHkoInkiKTt9ZWxzZXtpZihaPGMp e089Yzt9ZWxzZXtpZihaPlMpe089Uzt9fX19ZWxzZXtPPWgrZzt9fXJldHVybiBP O30sZ2V0Q29uc3RyYWluZWRYWTpmdW5jdGlvbihPLFApe3JldHVyblt0aGlzLmdl dENvbnN0cmFpbmVkWChPKSx0aGlzLmdldENvbnN0cmFpbmVkWShQKV07fSxjZW50 ZXI6ZnVuY3Rpb24oKXt2YXIgUj1CLlZJRVdQT1JUX09GRlNFVCxTPXRoaXMuZWxl bWVudC5vZmZzZXRXaWR0aCxRPXRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQsUD1G LmdldFZpZXdwb3J0V2lkdGgoKSxUPUYuZ2V0Vmlld3BvcnRIZWlnaHQoKSxPLFU7 aWYoUzxQKXtPPShQLzIpLShTLzIpK0YuZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KCk7 fWVsc2V7Tz1SK0YuZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KCk7fWlmKFE8VCl7VT0o VC8yKS0oUS8yKStGLmdldERvY3VtZW50U2Nyb2xsVG9wKCk7fWVsc2V7VT1SK0Yu Z2V0RG9jdW1lbnRTY3JvbGxUb3AoKTt9dGhpcy5jZmcuc2V0UHJvcGVydHkoInh5 IixbcGFyc2VJbnQoTywxMCkscGFyc2VJbnQoVSwxMCldKTt0aGlzLmNmZy5yZWZp cmVFdmVudCgiaWZyYW1lIik7aWYoSy53ZWJraXQpe3RoaXMuZm9yY2VDb250YWlu ZXJSZWRyYXcoKTt9fSxzeW5jUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgTz1GLmdl dFhZKHRoaXMuZWxlbWVudCk7dGhpcy5jZmcuc2V0UHJvcGVydHkoIngiLE9bMF0s dHJ1ZSk7dGhpcy5jZmcuc2V0UHJvcGVydHkoInkiLE9bMV0sdHJ1ZSk7dGhpcy5j Zmcuc2V0UHJvcGVydHkoInh5IixPLHRydWUpO30sb25Eb21SZXNpemU6ZnVuY3Rp b24oUSxQKXt2YXIgTz10aGlzO0Iuc3VwZXJjbGFzcy5vbkRvbVJlc2l6ZS5jYWxs KHRoaXMsUSxQKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ty5zeW5jUG9zaXRpb24o KTtPLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7Ty5jZmcucmVmaXJlRXZlbnQo ImNvbnRleHQiKTt9LDApO30sX2dldENvbXB1dGVkSGVpZ2h0OihmdW5jdGlvbigp e2lmKGRvY3VtZW50LmRlZmF1bHRWaWV3JiZkb2N1bWVudC5kZWZhdWx0Vmlldy5n ZXRDb21wdXRlZFN0eWxlKXtyZXR1cm4gZnVuY3Rpb24oUCl7dmFyIE89bnVsbDtp ZihQLm93bmVyRG9jdW1lbnQmJlAub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyl7 dmFyIFE9UC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5 bGUoUCwiIik7aWYoUSl7Tz1wYXJzZUludChRLmhlaWdodCwxMCk7fX1yZXR1cm4o SS5pc051bWJlcihPKSk/TzpudWxsO307fWVsc2V7cmV0dXJuIGZ1bmN0aW9uKFAp e3ZhciBPPW51bGw7aWYoUC5zdHlsZS5waXhlbEhlaWdodCl7Tz1QLnN0eWxlLnBp eGVsSGVpZ2h0O31yZXR1cm4oSS5pc051bWJlcihPKSk/TzpudWxsO307fX0pKCks X3ZhbGlkYXRlQXV0b0ZpbGxIZWlnaHQ6ZnVuY3Rpb24oTyl7cmV0dXJuKCFPKXx8 KEkuaXNTdHJpbmcoTykmJkIuU1REX01PRF9SRS50ZXN0KE8pKTt9LF9hdXRvRmls bE9uSGVpZ2h0Q2hhbmdlOmZ1bmN0aW9uKFIsUCxRKXt2YXIgTz10aGlzLmNmZy5n ZXRQcm9wZXJ0eSgiaGVpZ2h0Iik7aWYoKE8mJk8hPT0iYXV0byIpfHwoTz09PTAp KXt0aGlzLmZpbGxIZWlnaHQoUSk7fX0sX2dldFByZWNpc2VIZWlnaHQ6ZnVuY3Rp b24oUCl7dmFyIE89UC5vZmZzZXRIZWlnaHQ7aWYoUC5nZXRCb3VuZGluZ0NsaWVu dFJlY3Qpe3ZhciBRPVAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Tz1RLmJvdHRv bS1RLnRvcDt9cmV0dXJuIE87fSxmaWxsSGVpZ2h0OmZ1bmN0aW9uKFIpe2lmKFIp e3ZhciBQPXRoaXMuaW5uZXJFbGVtZW50fHx0aGlzLmVsZW1lbnQsTz1bdGhpcy5o ZWFkZXIsdGhpcy5ib2R5LHRoaXMuZm9vdGVyXSxWLFc9MCxYPTAsVD0wLFE9ZmFs c2U7Zm9yKHZhciBVPTAsUz1PLmxlbmd0aDtVPFM7VSsrKXtWPU9bVV07aWYoVil7 aWYoUiE9PVYpe1grPXRoaXMuX2dldFByZWNpc2VIZWlnaHQoVik7fWVsc2V7UT10 cnVlO319fWlmKFEpe2lmKEsuaWV8fEsub3BlcmEpe0Yuc2V0U3R5bGUoUiwiaGVp Z2h0IiwwKyJweCIpO31XPXRoaXMuX2dldENvbXB1dGVkSGVpZ2h0KFApO2lmKFc9 PT1udWxsKXtGLmFkZENsYXNzKFAsInl1aS1vdmVycmlkZS1wYWRkaW5nIik7Vz1Q LmNsaWVudEhlaWdodDtGLnJlbW92ZUNsYXNzKFAsInl1aS1vdmVycmlkZS1wYWRk aW5nIik7fVQ9TWF0aC5tYXgoVy1YLDApO0Yuc2V0U3R5bGUoUiwiaGVpZ2h0IixU KyJweCIpO2lmKFIub2Zmc2V0SGVpZ2h0IT1UKXtUPU1hdGgubWF4KFQtKFIub2Zm c2V0SGVpZ2h0LVQpLDApO31GLnNldFN0eWxlKFIsImhlaWdodCIsVCsicHgiKTt9 fX0sYnJpbmdUb1RvcDpmdW5jdGlvbigpe3ZhciBTPVtdLFI9dGhpcy5lbGVtZW50 O2Z1bmN0aW9uIFYoWixZKXt2YXIgYj1GLmdldFN0eWxlKFosInpJbmRleCIpLGE9 Ri5nZXRTdHlsZShZLCJ6SW5kZXgiKSxYPSghYnx8aXNOYU4oYikpPzA6cGFyc2VJ bnQoYiwxMCksVz0oIWF8fGlzTmFOKGEpKT8wOnBhcnNlSW50KGEsMTApO2lmKFg+ Vyl7cmV0dXJuLTE7fWVsc2V7aWYoWDxXKXtyZXR1cm4gMTt9ZWxzZXtyZXR1cm4g MDt9fX1mdW5jdGlvbiBRKFkpe3ZhciBYPUYuaGFzQ2xhc3MoWSxCLkNTU19PVkVS TEFZKSxXPVlBSE9PLndpZGdldC5QYW5lbDtpZihYJiYhRi5pc0FuY2VzdG9yKFIs WSkpe2lmKFcmJkYuaGFzQ2xhc3MoWSxXLkNTU19QQU5FTCkpe1NbUy5sZW5ndGhd PVkucGFyZW50Tm9kZTt9ZWxzZXtTW1MubGVuZ3RoXT1ZO319fUYuZ2V0RWxlbWVu dHNCeShRLCJESVYiLGRvY3VtZW50LmJvZHkpO1Muc29ydChWKTt2YXIgTz1TWzBd LFU7aWYoTyl7VT1GLmdldFN0eWxlKE8sInpJbmRleCIpO2lmKCFpc05hTihVKSl7 dmFyIFQ9ZmFsc2U7aWYoTyE9Uil7VD10cnVlO31lbHNle2lmKFMubGVuZ3RoPjEp e3ZhciBQPUYuZ2V0U3R5bGUoU1sxXSwiekluZGV4Iik7aWYoIWlzTmFOKFApJiYo VT09UCkpe1Q9dHJ1ZTt9fX1pZihUKXt0aGlzLmNmZy5zZXRQcm9wZXJ0eSgiemlu ZGV4IiwocGFyc2VJbnQoVSwxMCkrMikpO319fX0sZGVzdHJveTpmdW5jdGlvbigp e2lmKHRoaXMuaWZyYW1lKXt0aGlzLmlmcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNo aWxkKHRoaXMuaWZyYW1lKTt9dGhpcy5pZnJhbWU9bnVsbDtCLndpbmRvd1Jlc2l6 ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuZG9DZW50ZXJPbkRPTUV2ZW50LHRoaXMp O0Iud2luZG93U2Nyb2xsRXZlbnQudW5zdWJzY3JpYmUodGhpcy5kb0NlbnRlck9u RE9NRXZlbnQsdGhpcyk7Ry50ZXh0UmVzaXplRXZlbnQudW5zdWJzY3JpYmUodGhp cy5fYXV0b0ZpbGxPbkhlaWdodENoYW5nZSk7Qi5zdXBlcmNsYXNzLmRlc3Ryb3ku Y2FsbCh0aGlzKTt9LGZvcmNlQ29udGFpbmVyUmVkcmF3OmZ1bmN0aW9uKCl7dmFy IE89dGhpcztGLmFkZENsYXNzKE8uZWxlbWVudCwieXVpLWZvcmNlLXJlZHJhdyIp O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtGLnJlbW92ZUNsYXNzKE8uZWxlbWVudCwi eXVpLWZvcmNlLXJlZHJhdyIpO30sMCk7fSx0b1N0cmluZzpmdW5jdGlvbigpe3Jl dHVybiJPdmVybGF5ICIrdGhpcy5pZDt9fSk7fSgpKTsoZnVuY3Rpb24oKXtZQUhP Ty53aWRnZXQuT3ZlcmxheU1hbmFnZXI9ZnVuY3Rpb24oRyl7dGhpcy5pbml0KEcp O307dmFyIEQ9WUFIT08ud2lkZ2V0Lk92ZXJsYXksQz1ZQUhPTy51dGlsLkV2ZW50 LEU9WUFIT08udXRpbC5Eb20sQj1ZQUhPTy51dGlsLkNvbmZpZyxGPVlBSE9PLnV0 aWwuQ3VzdG9tRXZlbnQsQT1ZQUhPTy53aWRnZXQuT3ZlcmxheU1hbmFnZXI7QS5D U1NfRk9DVVNFRD0iZm9jdXNlZCI7QS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkEs b3ZlcmxheXM6bnVsbCxpbml0RGVmYXVsdENvbmZpZzpmdW5jdGlvbigpe3RoaXMu Y2ZnLmFkZFByb3BlcnR5KCJvdmVybGF5cyIse3N1cHByZXNzRXZlbnQ6dHJ1ZX0p O3RoaXMuY2ZnLmFkZFByb3BlcnR5KCJmb2N1c2V2ZW50Iix7dmFsdWU6Im1vdXNl ZG93biJ9KTt9LGluaXQ6ZnVuY3Rpb24oSSl7dGhpcy5jZmc9bmV3IEIodGhpcyk7 dGhpcy5pbml0RGVmYXVsdENvbmZpZygpO2lmKEkpe3RoaXMuY2ZnLmFwcGx5Q29u ZmlnKEksdHJ1ZSk7fXRoaXMuY2ZnLmZpcmVRdWV1ZSgpO3ZhciBIPW51bGw7dGhp cy5nZXRBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gSDt9O3RoaXMuZm9jdXM9ZnVu Y3Rpb24oSil7dmFyIEs9dGhpcy5maW5kKEopO2lmKEspe0suZm9jdXMoKTt9fTt0 aGlzLnJlbW92ZT1mdW5jdGlvbihLKXt2YXIgTT10aGlzLmZpbmQoSyksSjtpZihN KXtpZihIPT1NKXtIPW51bGw7fXZhciBMPShNLmVsZW1lbnQ9PT1udWxsJiZNLmNm Zz09PW51bGwpP3RydWU6ZmFsc2U7aWYoIUwpe0o9RS5nZXRTdHlsZShNLmVsZW1l bnQsInpJbmRleCIpO00uY2ZnLnNldFByb3BlcnR5KCJ6SW5kZXgiLC0xMDAwLHRy dWUpO310aGlzLm92ZXJsYXlzLnNvcnQodGhpcy5jb21wYXJlWkluZGV4RGVzYyk7 dGhpcy5vdmVybGF5cz10aGlzLm92ZXJsYXlzLnNsaWNlKDAsKHRoaXMub3Zlcmxh eXMubGVuZ3RoLTEpKTtNLmhpZGVFdmVudC51bnN1YnNjcmliZShNLmJsdXIpO00u ZGVzdHJveUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuX29uT3ZlcmxheURlc3Ryb3ks TSk7TS5mb2N1c0V2ZW50LnVuc3Vic2NyaWJlKHRoaXMuX29uT3ZlcmxheUZvY3Vz SGFuZGxlcixNKTtNLmJsdXJFdmVudC51bnN1YnNjcmliZSh0aGlzLl9vbk92ZXJs YXlCbHVySGFuZGxlcixNKTtpZighTCl7Qy5yZW1vdmVMaXN0ZW5lcihNLmVsZW1l bnQsdGhpcy5jZmcuZ2V0UHJvcGVydHkoImZvY3VzZXZlbnQiKSx0aGlzLl9vbk92 ZXJsYXlFbGVtZW50Rm9jdXMpO00uY2ZnLnNldFByb3BlcnR5KCJ6SW5kZXgiLEos dHJ1ZSk7TS5jZmcuc2V0UHJvcGVydHkoIm1hbmFnZXIiLG51bGwpO31pZihNLmZv Y3VzRXZlbnQuX21hbmFnZWQpe00uZm9jdXNFdmVudD1udWxsO31pZihNLmJsdXJF dmVudC5fbWFuYWdlZCl7TS5ibHVyRXZlbnQ9bnVsbDt9aWYoTS5mb2N1cy5fbWFu YWdlZCl7TS5mb2N1cz1udWxsO31pZihNLmJsdXIuX21hbmFnZWQpe00uYmx1cj1u dWxsO319fTt0aGlzLmJsdXJBbGw9ZnVuY3Rpb24oKXt2YXIgSz10aGlzLm92ZXJs YXlzLmxlbmd0aCxKO2lmKEs+MCl7Sj1LLTE7ZG97dGhpcy5vdmVybGF5c1tKXS5i bHVyKCk7fXdoaWxlKEotLSk7fX07dGhpcy5fbWFuYWdlQmx1cj1mdW5jdGlvbihK KXt2YXIgSz1mYWxzZTtpZihIPT1KKXtFLnJlbW92ZUNsYXNzKEguZWxlbWVudCxB LkNTU19GT0NVU0VEKTtIPW51bGw7Sz10cnVlO31yZXR1cm4gSzt9O3RoaXMuX21h bmFnZUZvY3VzPWZ1bmN0aW9uKEope3ZhciBLPWZhbHNlO2lmKEghPUope2lmKEgp e0guYmx1cigpO31IPUo7dGhpcy5icmluZ1RvVG9wKEgpO0UuYWRkQ2xhc3MoSC5l bGVtZW50LEEuQ1NTX0ZPQ1VTRUQpO0s9dHJ1ZTt9cmV0dXJuIEs7fTt2YXIgRz10 aGlzLmNmZy5nZXRQcm9wZXJ0eSgib3ZlcmxheXMiKTtpZighdGhpcy5vdmVybGF5 cyl7dGhpcy5vdmVybGF5cz1bXTt9aWYoRyl7dGhpcy5yZWdpc3RlcihHKTt0aGlz Lm92ZXJsYXlzLnNvcnQodGhpcy5jb21wYXJlWkluZGV4RGVzYyk7fX0sX29uT3Zl cmxheUVsZW1lbnRGb2N1czpmdW5jdGlvbihJKXt2YXIgRz1DLmdldFRhcmdldChJ KSxIPXRoaXMuY2xvc2U7aWYoSCYmKEc9PUh8fEUuaXNBbmNlc3RvcihILEcpKSl7 dGhpcy5ibHVyKCk7fWVsc2V7dGhpcy5mb2N1cygpO319LF9vbk92ZXJsYXlEZXN0 cm95OmZ1bmN0aW9uKEgsRyxJKXt0aGlzLnJlbW92ZShJKTt9LF9vbk92ZXJsYXlG b2N1c0hhbmRsZXI6ZnVuY3Rpb24oSCxHLEkpe3RoaXMuX21hbmFnZUZvY3VzKEkp O30sX29uT3ZlcmxheUJsdXJIYW5kbGVyOmZ1bmN0aW9uKEgsRyxJKXt0aGlzLl9t YW5hZ2VCbHVyKEkpO30sX2JpbmRGb2N1czpmdW5jdGlvbihHKXt2YXIgSD10aGlz O2lmKCFHLmZvY3VzRXZlbnQpe0cuZm9jdXNFdmVudD1HLmNyZWF0ZUV2ZW50KCJm b2N1cyIpO0cuZm9jdXNFdmVudC5zaWduYXR1cmU9Ri5MSVNUO0cuZm9jdXNFdmVu dC5fbWFuYWdlZD10cnVlO31lbHNle0cuZm9jdXNFdmVudC5zdWJzY3JpYmUoSC5f b25PdmVybGF5Rm9jdXNIYW5kbGVyLEcsSCk7fWlmKCFHLmZvY3VzKXtDLm9uKEcu ZWxlbWVudCxILmNmZy5nZXRQcm9wZXJ0eSgiZm9jdXNldmVudCIpLEguX29uT3Zl cmxheUVsZW1lbnRGb2N1cyxudWxsLEcpO0cuZm9jdXM9ZnVuY3Rpb24oKXtpZihI Ll9tYW5hZ2VGb2N1cyh0aGlzKSl7aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoInZp c2libGUiKSYmdGhpcy5mb2N1c0ZpcnN0KXt0aGlzLmZvY3VzRmlyc3QoKTt9dGhp cy5mb2N1c0V2ZW50LmZpcmUoKTt9fTtHLmZvY3VzLl9tYW5hZ2VkPXRydWU7fX0s X2JpbmRCbHVyOmZ1bmN0aW9uKEcpe3ZhciBIPXRoaXM7aWYoIUcuYmx1ckV2ZW50 KXtHLmJsdXJFdmVudD1HLmNyZWF0ZUV2ZW50KCJibHVyIik7Ry5ibHVyRXZlbnQu c2lnbmF0dXJlPUYuTElTVDtHLmZvY3VzRXZlbnQuX21hbmFnZWQ9dHJ1ZTt9ZWxz ZXtHLmJsdXJFdmVudC5zdWJzY3JpYmUoSC5fb25PdmVybGF5Qmx1ckhhbmRsZXIs RyxIKTt9aWYoIUcuYmx1cil7Ry5ibHVyPWZ1bmN0aW9uKCl7aWYoSC5fbWFuYWdl Qmx1cih0aGlzKSl7dGhpcy5ibHVyRXZlbnQuZmlyZSgpO319O0cuYmx1ci5fbWFu YWdlZD10cnVlO31HLmhpZGVFdmVudC5zdWJzY3JpYmUoRy5ibHVyKTt9LF9iaW5k RGVzdHJveTpmdW5jdGlvbihHKXt2YXIgSD10aGlzO0cuZGVzdHJveUV2ZW50LnN1 YnNjcmliZShILl9vbk92ZXJsYXlEZXN0cm95LEcsSCk7fSxfc3luY1pJbmRleDpm dW5jdGlvbihHKXt2YXIgSD1FLmdldFN0eWxlKEcuZWxlbWVudCwiekluZGV4Iik7 aWYoIWlzTmFOKEgpKXtHLmNmZy5zZXRQcm9wZXJ0eSgiekluZGV4IixwYXJzZUlu dChILDEwKSk7fWVsc2V7Ry5jZmcuc2V0UHJvcGVydHkoInpJbmRleCIsMCk7fX0s cmVnaXN0ZXI6ZnVuY3Rpb24oRyl7dmFyIEo9ZmFsc2UsSCxJO2lmKEcgaW5zdGFu Y2VvZiBEKXtHLmNmZy5hZGRQcm9wZXJ0eSgibWFuYWdlciIse3ZhbHVlOnRoaXN9 KTt0aGlzLl9iaW5kRm9jdXMoRyk7dGhpcy5fYmluZEJsdXIoRyk7dGhpcy5fYmlu ZERlc3Ryb3koRyk7dGhpcy5fc3luY1pJbmRleChHKTt0aGlzLm92ZXJsYXlzLnB1 c2goRyk7dGhpcy5icmluZ1RvVG9wKEcpO0o9dHJ1ZTt9ZWxzZXtpZihHIGluc3Rh bmNlb2YgQXJyYXkpe2ZvcihIPTAsST1HLmxlbmd0aDtIPEk7SCsrKXtKPXRoaXMu cmVnaXN0ZXIoR1tIXSl8fEo7fX19cmV0dXJuIEo7fSxicmluZ1RvVG9wOmZ1bmN0 aW9uKE0pe3ZhciBJPXRoaXMuZmluZChNKSxMLEcsSjtpZihJKXtKPXRoaXMub3Zl cmxheXM7Si5zb3J0KHRoaXMuY29tcGFyZVpJbmRleERlc2MpO0c9SlswXTtpZihH KXtMPUUuZ2V0U3R5bGUoRy5lbGVtZW50LCJ6SW5kZXgiKTtpZighaXNOYU4oTCkp e3ZhciBLPWZhbHNlO2lmKEchPT1JKXtLPXRydWU7fWVsc2V7aWYoSi5sZW5ndGg+ MSl7dmFyIEg9RS5nZXRTdHlsZShKWzFdLmVsZW1lbnQsInpJbmRleCIpO2lmKCFp c05hTihIKSYmKEw9PUgpKXtLPXRydWU7fX19aWYoSyl7SS5jZmcuc2V0UHJvcGVy dHkoInppbmRleCIsKHBhcnNlSW50KEwsMTApKzIpKTt9fUouc29ydCh0aGlzLmNv bXBhcmVaSW5kZXhEZXNjKTt9fX0sZmluZDpmdW5jdGlvbihHKXt2YXIgSz1HIGlu c3RhbmNlb2YgRCxJPXRoaXMub3ZlcmxheXMsTT1JLmxlbmd0aCxKPW51bGwsTCxI O2lmKEt8fHR5cGVvZiBHPT0ic3RyaW5nIil7Zm9yKEg9TS0xO0g+PTA7SC0tKXtM PUlbSF07aWYoKEsmJihMPT09RykpfHwoTC5pZD09Rykpe0o9TDticmVhazt9fX1y ZXR1cm4gSjt9LGNvbXBhcmVaSW5kZXhEZXNjOmZ1bmN0aW9uKEosSSl7dmFyIEg9 KEouY2ZnKT9KLmNmZy5nZXRQcm9wZXJ0eSgiekluZGV4Iik6bnVsbCxHPShJLmNm Zyk/SS5jZmcuZ2V0UHJvcGVydHkoInpJbmRleCIpOm51bGw7aWYoSD09PW51bGwm Jkc9PT1udWxsKXtyZXR1cm4gMDt9ZWxzZXtpZihIPT09bnVsbCl7cmV0dXJuIDE7 fWVsc2V7aWYoRz09PW51bGwpe3JldHVybi0xO31lbHNle2lmKEg+Ryl7cmV0dXJu LTE7fWVsc2V7aWYoSDxHKXtyZXR1cm4gMTt9ZWxzZXtyZXR1cm4gMDt9fX19fX0s c2hvd0FsbDpmdW5jdGlvbigpe3ZhciBIPXRoaXMub3ZlcmxheXMsST1ILmxlbmd0 aCxHO2ZvcihHPUktMTtHPj0wO0ctLSl7SFtHXS5zaG93KCk7fX0saGlkZUFsbDpm dW5jdGlvbigpe3ZhciBIPXRoaXMub3ZlcmxheXMsST1ILmxlbmd0aCxHO2ZvcihH PUktMTtHPj0wO0ctLSl7SFtHXS5oaWRlKCk7fX0sdG9TdHJpbmc6ZnVuY3Rpb24o KXtyZXR1cm4iT3ZlcmxheU1hbmFnZXIiO319O30oKSk7KGZ1bmN0aW9uKCl7WUFI T08ud2lkZ2V0LlRvb2x0aXA9ZnVuY3Rpb24oUCxPKXtZQUhPTy53aWRnZXQuVG9v bHRpcC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxQLE8pO307dmFy IEU9WUFIT08ubGFuZyxOPVlBSE9PLnV0aWwuRXZlbnQsTT1ZQUhPTy51dGlsLkN1 c3RvbUV2ZW50LEM9WUFIT08udXRpbC5Eb20sSj1ZQUhPTy53aWRnZXQuVG9vbHRp cCxIPVlBSE9PLmVudi51YSxHPShILmllJiYoSC5pZTw9Nnx8ZG9jdW1lbnQuY29t cGF0TW9kZT09IkJhY2tDb21wYXQiKSksRixJPXsiUFJFVkVOVF9PVkVSTEFQIjp7 a2V5OiJwcmV2ZW50b3ZlcmxhcCIsdmFsdWU6dHJ1ZSx2YWxpZGF0b3I6RS5pc0Jv b2xlYW4sc3VwZXJjZWRlczpbIngiLCJ5IiwieHkiXX0sIlNIT1dfREVMQVkiOntr ZXk6InNob3dkZWxheSIsdmFsdWU6MjAwLHZhbGlkYXRvcjpFLmlzTnVtYmVyfSwi QVVUT19ESVNNSVNTX0RFTEFZIjp7a2V5OiJhdXRvZGlzbWlzc2RlbGF5Iix2YWx1 ZTo1MDAwLHZhbGlkYXRvcjpFLmlzTnVtYmVyfSwiSElERV9ERUxBWSI6e2tleToi aGlkZWRlbGF5Iix2YWx1ZToyNTAsdmFsaWRhdG9yOkUuaXNOdW1iZXJ9LCJURVhU Ijp7a2V5OiJ0ZXh0IixzdXBwcmVzc0V2ZW50OnRydWV9LCJDT05UQUlORVIiOntr ZXk6ImNvbnRhaW5lciJ9LCJESVNBQkxFRCI6e2tleToiZGlzYWJsZWQiLHZhbHVl OmZhbHNlLHN1cHByZXNzRXZlbnQ6dHJ1ZX19LEE9eyJDT05URVhUX01PVVNFX09W RVIiOiJjb250ZXh0TW91c2VPdmVyIiwiQ09OVEVYVF9NT1VTRV9PVVQiOiJjb250 ZXh0TW91c2VPdXQiLCJDT05URVhUX1RSSUdHRVIiOiJjb250ZXh0VHJpZ2dlciJ9 O0ouQ1NTX1RPT0xUSVA9Inl1aS10dCI7ZnVuY3Rpb24gSyhRLE8pe3ZhciBQPXRo aXMuY2ZnLFI9UC5nZXRQcm9wZXJ0eSgid2lkdGgiKTtpZihSPT1PKXtQLnNldFBy b3BlcnR5KCJ3aWR0aCIsUSk7fX1mdW5jdGlvbiBEKFAsTyl7aWYoIl9vcmlnaW5h bFdpZHRoImluIHRoaXMpe0suY2FsbCh0aGlzLHRoaXMuX29yaWdpbmFsV2lkdGgs dGhpcy5fZm9yY2VkV2lkdGgpO312YXIgUT1kb2N1bWVudC5ib2R5LFU9dGhpcy5j ZmcsVD1VLmdldFByb3BlcnR5KCJ3aWR0aCIpLFIsUztpZigoIVR8fFQ9PSJhdXRv IikmJihVLmdldFByb3BlcnR5KCJjb250YWluZXIiKSE9UXx8VS5nZXRQcm9wZXJ0 eSgieCIpPj1DLmdldFZpZXdwb3J0V2lkdGgoKXx8VS5nZXRQcm9wZXJ0eSgieSIp Pj1DLmdldFZpZXdwb3J0SGVpZ2h0KCkpKXtTPXRoaXMuZWxlbWVudC5jbG9uZU5v ZGUodHJ1ZSk7Uy5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iO1Muc3R5bGUudG9w PSIwcHgiO1Muc3R5bGUubGVmdD0iMHB4IjtRLmFwcGVuZENoaWxkKFMpO1I9KFMu b2Zmc2V0V2lkdGgrInB4Iik7US5yZW1vdmVDaGlsZChTKTtTPW51bGw7VS5zZXRQ cm9wZXJ0eSgid2lkdGgiLFIpO1UucmVmaXJlRXZlbnQoInh5Iik7dGhpcy5fb3Jp Z2luYWxXaWR0aD1UfHwiIjt0aGlzLl9mb3JjZWRXaWR0aD1SO319ZnVuY3Rpb24g QihQLE8sUSl7dGhpcy5yZW5kZXIoUSk7fWZ1bmN0aW9uIEwoKXtOLm9uRE9NUmVh ZHkoQix0aGlzLmNmZy5nZXRQcm9wZXJ0eSgiY29udGFpbmVyIiksdGhpcyk7fVlB SE9PLmV4dGVuZChKLFlBSE9PLndpZGdldC5PdmVybGF5LHtpbml0OmZ1bmN0aW9u KFAsTyl7Si5zdXBlcmNsYXNzLmluaXQuY2FsbCh0aGlzLFApO3RoaXMuYmVmb3Jl SW5pdEV2ZW50LmZpcmUoSik7Qy5hZGRDbGFzcyh0aGlzLmVsZW1lbnQsSi5DU1Nf VE9PTFRJUCk7aWYoTyl7dGhpcy5jZmcuYXBwbHlDb25maWcoTyx0cnVlKTt9dGhp cy5jZmcucXVldWVQcm9wZXJ0eSgidmlzaWJsZSIsZmFsc2UpO3RoaXMuY2ZnLnF1 ZXVlUHJvcGVydHkoImNvbnN0cmFpbnRvdmlld3BvcnQiLHRydWUpO3RoaXMuc2V0 Qm9keSgiIik7dGhpcy5zdWJzY3JpYmUoImNoYW5nZUNvbnRlbnQiLEQpO3RoaXMu c3Vic2NyaWJlKCJpbml0IixMKTt0aGlzLnN1YnNjcmliZSgicmVuZGVyIix0aGlz Lm9uUmVuZGVyKTt0aGlzLmluaXRFdmVudC5maXJlKEopO30saW5pdEV2ZW50czpm dW5jdGlvbigpe0ouc3VwZXJjbGFzcy5pbml0RXZlbnRzLmNhbGwodGhpcyk7dmFy IE89TS5MSVNUO3RoaXMuY29udGV4dE1vdXNlT3ZlckV2ZW50PXRoaXMuY3JlYXRl RXZlbnQoQS5DT05URVhUX01PVVNFX09WRVIpO3RoaXMuY29udGV4dE1vdXNlT3Zl ckV2ZW50LnNpZ25hdHVyZT1PO3RoaXMuY29udGV4dE1vdXNlT3V0RXZlbnQ9dGhp cy5jcmVhdGVFdmVudChBLkNPTlRFWFRfTU9VU0VfT1VUKTt0aGlzLmNvbnRleHRN b3VzZU91dEV2ZW50LnNpZ25hdHVyZT1PO3RoaXMuY29udGV4dFRyaWdnZXJFdmVu dD10aGlzLmNyZWF0ZUV2ZW50KEEuQ09OVEVYVF9UUklHR0VSKTt0aGlzLmNvbnRl eHRUcmlnZ2VyRXZlbnQuc2lnbmF0dXJlPU87fSxpbml0RGVmYXVsdENvbmZpZzpm dW5jdGlvbigpe0ouc3VwZXJjbGFzcy5pbml0RGVmYXVsdENvbmZpZy5jYWxsKHRo aXMpO3RoaXMuY2ZnLmFkZFByb3BlcnR5KEkuUFJFVkVOVF9PVkVSTEFQLmtleSx7 dmFsdWU6SS5QUkVWRU5UX09WRVJMQVAudmFsdWUsdmFsaWRhdG9yOkkuUFJFVkVO VF9PVkVSTEFQLnZhbGlkYXRvcixzdXBlcmNlZGVzOkkuUFJFVkVOVF9PVkVSTEFQ LnN1cGVyY2VkZXN9KTt0aGlzLmNmZy5hZGRQcm9wZXJ0eShJLlNIT1dfREVMQVku a2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnU2hvd0RlbGF5LHZhbHVlOjIwMCx2YWxp ZGF0b3I6SS5TSE9XX0RFTEFZLnZhbGlkYXRvcn0pO3RoaXMuY2ZnLmFkZFByb3Bl cnR5KEkuQVVUT19ESVNNSVNTX0RFTEFZLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZp Z0F1dG9EaXNtaXNzRGVsYXksdmFsdWU6SS5BVVRPX0RJU01JU1NfREVMQVkudmFs dWUsdmFsaWRhdG9yOkkuQVVUT19ESVNNSVNTX0RFTEFZLnZhbGlkYXRvcn0pO3Ro aXMuY2ZnLmFkZFByb3BlcnR5KEkuSElERV9ERUxBWS5rZXkse2hhbmRsZXI6dGhp cy5jb25maWdIaWRlRGVsYXksdmFsdWU6SS5ISURFX0RFTEFZLnZhbHVlLHZhbGlk YXRvcjpJLkhJREVfREVMQVkudmFsaWRhdG9yfSk7dGhpcy5jZmcuYWRkUHJvcGVy dHkoSS5URVhULmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ1RleHQsc3VwcHJlc3NF dmVudDpJLlRFWFQuc3VwcHJlc3NFdmVudH0pO3RoaXMuY2ZnLmFkZFByb3BlcnR5 KEkuQ09OVEFJTkVSLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZpZ0NvbnRhaW5lcix2 YWx1ZTpkb2N1bWVudC5ib2R5fSk7dGhpcy5jZmcuYWRkUHJvcGVydHkoSS5ESVNB QkxFRC5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdDb250YWluZXIsdmFsdWU6SS5E SVNBQkxFRC52YWx1ZSxzdXByZXNzRXZlbnQ6SS5ESVNBQkxFRC5zdXBwcmVzc0V2 ZW50fSk7fSxjb25maWdUZXh0OmZ1bmN0aW9uKFAsTyxRKXt2YXIgUj1PWzBdO2lm KFIpe3RoaXMuc2V0Qm9keShSKTt9fSxjb25maWdDb250YWluZXI6ZnVuY3Rpb24o USxQLFIpe3ZhciBPPVBbMF07aWYodHlwZW9mIE89PSJzdHJpbmciKXt0aGlzLmNm Zy5zZXRQcm9wZXJ0eSgiY29udGFpbmVyIixkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZChPKSx0cnVlKTt9fSxfcmVtb3ZlRXZlbnRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt2 YXIgUj10aGlzLl9jb250ZXh0LE8sUSxQO2lmKFIpe089Ui5sZW5ndGg7aWYoTz4w KXtQPU8tMTtkb3tRPVJbUF07Ti5yZW1vdmVMaXN0ZW5lcihRLCJtb3VzZW92ZXIi LHRoaXMub25Db250ZXh0TW91c2VPdmVyKTtOLnJlbW92ZUxpc3RlbmVyKFEsIm1v dXNlbW92ZSIsdGhpcy5vbkNvbnRleHRNb3VzZU1vdmUpO04ucmVtb3ZlTGlzdGVu ZXIoUSwibW91c2VvdXQiLHRoaXMub25Db250ZXh0TW91c2VPdXQpO313aGlsZShQ LS0pO319fSxjb25maWdDb250ZXh0OmZ1bmN0aW9uKFQsUCxVKXt2YXIgUz1QWzBd LFYsTyxSLFE7aWYoUyl7aWYoIShTIGluc3RhbmNlb2YgQXJyYXkpKXtpZih0eXBl b2YgUz09InN0cmluZyIpe3RoaXMuY2ZnLnNldFByb3BlcnR5KCJjb250ZXh0Iixb ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUyldLHRydWUpO31lbHNle3RoaXMuY2Zn LnNldFByb3BlcnR5KCJjb250ZXh0IixbU10sdHJ1ZSk7fVM9dGhpcy5jZmcuZ2V0 UHJvcGVydHkoImNvbnRleHQiKTt9dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcnMo KTt0aGlzLl9jb250ZXh0PVM7Vj10aGlzLl9jb250ZXh0O2lmKFYpe089Vi5sZW5n dGg7aWYoTz4wKXtRPU8tMTtkb3tSPVZbUV07Ti5vbihSLCJtb3VzZW92ZXIiLHRo aXMub25Db250ZXh0TW91c2VPdmVyLHRoaXMpO04ub24oUiwibW91c2Vtb3ZlIix0 aGlzLm9uQ29udGV4dE1vdXNlTW92ZSx0aGlzKTtOLm9uKFIsIm1vdXNlb3V0Iix0 aGlzLm9uQ29udGV4dE1vdXNlT3V0LHRoaXMpO313aGlsZShRLS0pO319fX0sb25D b250ZXh0TW91c2VNb3ZlOmZ1bmN0aW9uKFAsTyl7Ty5wYWdlWD1OLmdldFBhZ2VY KFApO08ucGFnZVk9Ti5nZXRQYWdlWShQKTt9LG9uQ29udGV4dE1vdXNlT3Zlcjpm dW5jdGlvbihRLFApe3ZhciBPPXRoaXM7aWYoTy50aXRsZSl7UC5fdGVtcFRpdGxl PU8udGl0bGU7Ty50aXRsZT0iIjt9aWYoUC5maXJlRXZlbnQoImNvbnRleHRNb3Vz ZU92ZXIiLE8sUSkhPT1mYWxzZSYmIVAuY2ZnLmdldFByb3BlcnR5KCJkaXNhYmxl ZCIpKXtpZihQLmhpZGVQcm9jSWQpe2NsZWFyVGltZW91dChQLmhpZGVQcm9jSWQp O1AuaGlkZVByb2NJZD1udWxsO31OLm9uKE8sIm1vdXNlbW92ZSIsUC5vbkNvbnRl eHRNb3VzZU1vdmUsUCk7UC5zaG93UHJvY0lkPVAuZG9TaG93KFEsTyk7fX0sb25D b250ZXh0TW91c2VPdXQ6ZnVuY3Rpb24oUSxQKXt2YXIgTz10aGlzO2lmKFAuX3Rl bXBUaXRsZSl7Ty50aXRsZT1QLl90ZW1wVGl0bGU7UC5fdGVtcFRpdGxlPW51bGw7 fWlmKFAuc2hvd1Byb2NJZCl7Y2xlYXJUaW1lb3V0KFAuc2hvd1Byb2NJZCk7UC5z aG93UHJvY0lkPW51bGw7fWlmKFAuaGlkZVByb2NJZCl7Y2xlYXJUaW1lb3V0KFAu aGlkZVByb2NJZCk7UC5oaWRlUHJvY0lkPW51bGw7fVAuZmlyZUV2ZW50KCJjb250 ZXh0TW91c2VPdXQiLE8sUSk7UC5oaWRlUHJvY0lkPXNldFRpbWVvdXQoZnVuY3Rp b24oKXtQLmhpZGUoKTt9LFAuY2ZnLmdldFByb3BlcnR5KCJoaWRlZGVsYXkiKSk7 fSxkb1Nob3c6ZnVuY3Rpb24oUSxPKXt2YXIgUj0yNSxQPXRoaXM7aWYoSC5vcGVy YSYmTy50YWdOYW1lJiZPLnRhZ05hbWUudG9VcHBlckNhc2UoKT09IkEiKXtSKz0x Mjt9cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgUz1QLmNmZy5nZXRQ cm9wZXJ0eSgidGV4dCIpO2lmKFAuX3RlbXBUaXRsZSYmKFM9PT0iInx8WUFIT08u bGFuZy5pc1VuZGVmaW5lZChTKXx8WUFIT08ubGFuZy5pc051bGwoUykpKXtQLnNl dEJvZHkoUC5fdGVtcFRpdGxlKTt9ZWxzZXtQLmNmZy5yZWZpcmVFdmVudCgidGV4 dCIpO31QLm1vdmVUbyhQLnBhZ2VYLFAucGFnZVkrUik7aWYoUC5jZmcuZ2V0UHJv cGVydHkoInByZXZlbnRvdmVybGFwIikpe1AucHJldmVudE92ZXJsYXAoUC5wYWdl WCxQLnBhZ2VZKTt9Ti5yZW1vdmVMaXN0ZW5lcihPLCJtb3VzZW1vdmUiLFAub25D b250ZXh0TW91c2VNb3ZlKTtQLmNvbnRleHRUcmlnZ2VyRXZlbnQuZmlyZShPKTtQ LnNob3coKTtQLmhpZGVQcm9jSWQ9UC5kb0hpZGUoKTt9LHRoaXMuY2ZnLmdldFBy b3BlcnR5KCJzaG93ZGVsYXkiKSk7fSxkb0hpZGU6ZnVuY3Rpb24oKXt2YXIgTz10 aGlzO3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ty5oaWRlKCk7fSx0aGlz LmNmZy5nZXRQcm9wZXJ0eSgiYXV0b2Rpc21pc3NkZWxheSIpKTt9LHByZXZlbnRP dmVybGFwOmZ1bmN0aW9uKFMsUil7dmFyIE89dGhpcy5lbGVtZW50Lm9mZnNldEhl aWdodCxRPW5ldyBZQUhPTy51dGlsLlBvaW50KFMsUiksUD1DLmdldFJlZ2lvbih0 aGlzLmVsZW1lbnQpO1AudG9wLT01O1AubGVmdC09NTtQLnJpZ2h0Kz01O1AuYm90 dG9tKz01O2lmKFAuY29udGFpbnMoUSkpe3RoaXMuY2ZnLnNldFByb3BlcnR5KCJ5 IiwoUi1PLTUpKTt9fSxvblJlbmRlcjpmdW5jdGlvbihTLFIpe2Z1bmN0aW9uIFQo KXt2YXIgVz10aGlzLmVsZW1lbnQsVj10aGlzLnVuZGVybGF5O2lmKFYpe1Yuc3R5 bGUud2lkdGg9KFcub2Zmc2V0V2lkdGgrNikrInB4IjtWLnN0eWxlLmhlaWdodD0o Vy5vZmZzZXRIZWlnaHQrMSkrInB4Ijt9fWZ1bmN0aW9uIFAoKXtDLmFkZENsYXNz KHRoaXMudW5kZXJsYXksInl1aS10dC1zaGFkb3ctdmlzaWJsZSIpO2lmKEguaWUp e3RoaXMuZm9yY2VVbmRlcmxheVJlZHJhdygpO319ZnVuY3Rpb24gTygpe0MucmVt b3ZlQ2xhc3ModGhpcy51bmRlcmxheSwieXVpLXR0LXNoYWRvdy12aXNpYmxlIik7 fWZ1bmN0aW9uIFUoKXt2YXIgWD10aGlzLnVuZGVybGF5LFcsVixaLFk7aWYoIVgp e1c9dGhpcy5lbGVtZW50O1Y9WUFIT08ud2lkZ2V0Lk1vZHVsZTtaPUguaWU7WT10 aGlzO2lmKCFGKXtGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0YuY2xh c3NOYW1lPSJ5dWktdHQtc2hhZG93Ijt9WD1GLmNsb25lTm9kZShmYWxzZSk7Vy5h cHBlbmRDaGlsZChYKTt0aGlzLnVuZGVybGF5PVg7dGhpcy5fc2hhZG93PXRoaXMu dW5kZXJsYXk7UC5jYWxsKHRoaXMpO3RoaXMuc3Vic2NyaWJlKCJiZWZvcmVTaG93 IixQKTt0aGlzLnN1YnNjcmliZSgiaGlkZSIsTyk7aWYoRyl7d2luZG93LnNldFRp bWVvdXQoZnVuY3Rpb24oKXtULmNhbGwoWSk7fSwwKTt0aGlzLmNmZy5zdWJzY3Jp YmVUb0NvbmZpZ0V2ZW50KCJ3aWR0aCIsVCk7dGhpcy5jZmcuc3Vic2NyaWJlVG9D b25maWdFdmVudCgiaGVpZ2h0IixUKTt0aGlzLnN1YnNjcmliZSgiY2hhbmdlQ29u dGVudCIsVCk7Vi50ZXh0UmVzaXplRXZlbnQuc3Vic2NyaWJlKFQsdGhpcyx0cnVl KTt0aGlzLnN1YnNjcmliZSgiZGVzdHJveSIsZnVuY3Rpb24oKXtWLnRleHRSZXNp emVFdmVudC51bnN1YnNjcmliZShULHRoaXMpO30pO319fWZ1bmN0aW9uIFEoKXtV LmNhbGwodGhpcyk7dGhpcy51bnN1YnNjcmliZSgiYmVmb3JlU2hvdyIsUSk7fWlm KHRoaXMuY2ZnLmdldFByb3BlcnR5KCJ2aXNpYmxlIikpe1UuY2FsbCh0aGlzKTt9 ZWxzZXt0aGlzLnN1YnNjcmliZSgiYmVmb3JlU2hvdyIsUSk7fX0sZm9yY2VVbmRl cmxheVJlZHJhdzpmdW5jdGlvbigpe3ZhciBPPXRoaXM7Qy5hZGRDbGFzcyhPLnVu ZGVybGF5LCJ5dWktZm9yY2UtcmVkcmF3Iik7c2V0VGltZW91dChmdW5jdGlvbigp e0MucmVtb3ZlQ2xhc3MoTy51bmRlcmxheSwieXVpLWZvcmNlLXJlZHJhdyIpO30s MCk7fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5l cnMoKTtKLnN1cGVyY2xhc3MuZGVzdHJveS5jYWxsKHRoaXMpO30sdG9TdHJpbmc6 ZnVuY3Rpb24oKXtyZXR1cm4iVG9vbHRpcCAiK3RoaXMuaWQ7fX0pO30oKSk7KGZ1 bmN0aW9uKCl7WUFIT08ud2lkZ2V0LlBhbmVsPWZ1bmN0aW9uKFYsVSl7WUFIT08u d2lkZ2V0LlBhbmVsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLFYs VSk7fTt2YXIgUz1udWxsO3ZhciBFPVlBSE9PLmxhbmcsRj1ZQUhPTy51dGlsLEE9 Ri5Eb20sVD1GLkV2ZW50LE09Ri5DdXN0b21FdmVudCxLPVlBSE9PLnV0aWwuS2V5 TGlzdGVuZXIsST1GLkNvbmZpZyxIPVlBSE9PLndpZGdldC5PdmVybGF5LE89WUFI T08ud2lkZ2V0LlBhbmVsLEw9WUFIT08uZW52LnVhLFA9KEwuaWUmJihMLmllPD02 fHxkb2N1bWVudC5jb21wYXRNb2RlPT0iQmFja0NvbXBhdCIpKSxHLFEsQyxEPXsi U0hPV19NQVNLIjoic2hvd01hc2siLCJISURFX01BU0siOiJoaWRlTWFzayIsIkRS QUciOiJkcmFnIn0sTj17IkNMT1NFIjp7a2V5OiJjbG9zZSIsdmFsdWU6dHJ1ZSx2 YWxpZGF0b3I6RS5pc0Jvb2xlYW4sc3VwZXJjZWRlczpbInZpc2libGUiXX0sIkRS QUdHQUJMRSI6e2tleToiZHJhZ2dhYmxlIix2YWx1ZTooRi5ERD90cnVlOmZhbHNl KSx2YWxpZGF0b3I6RS5pc0Jvb2xlYW4sc3VwZXJjZWRlczpbInZpc2libGUiXX0s IkRSQUdfT05MWSI6e2tleToiZHJhZ29ubHkiLHZhbHVlOmZhbHNlLHZhbGlkYXRv cjpFLmlzQm9vbGVhbixzdXBlcmNlZGVzOlsiZHJhZ2dhYmxlIl19LCJVTkRFUkxB WSI6e2tleToidW5kZXJsYXkiLHZhbHVlOiJzaGFkb3ciLHN1cGVyY2VkZXM6WyJ2 aXNpYmxlIl19LCJNT0RBTCI6e2tleToibW9kYWwiLHZhbHVlOmZhbHNlLHZhbGlk YXRvcjpFLmlzQm9vbGVhbixzdXBlcmNlZGVzOlsidmlzaWJsZSIsInppbmRleCJd fSwiS0VZX0xJU1RFTkVSUyI6e2tleToia2V5bGlzdGVuZXJzIixzdXBwcmVzc0V2 ZW50OnRydWUsc3VwZXJjZWRlczpbInZpc2libGUiXX0sIlNUUklOR1MiOntrZXk6 InN0cmluZ3MiLHN1cGVyY2VkZXM6WyJjbG9zZSJdLHZhbGlkYXRvcjpFLmlzT2Jq ZWN0LHZhbHVlOntjbG9zZToiQ2xvc2UifX19O08uQ1NTX1BBTkVMPSJ5dWktcGFu ZWwiO08uQ1NTX1BBTkVMX0NPTlRBSU5FUj0ieXVpLXBhbmVsLWNvbnRhaW5lciI7 Ty5GT0NVU0FCTEU9WyJhIiwiYnV0dG9uIiwic2VsZWN0IiwidGV4dGFyZWEiLCJp bnB1dCIsImlmcmFtZSJdO2Z1bmN0aW9uIEooVixVKXtpZighdGhpcy5oZWFkZXIm JnRoaXMuY2ZnLmdldFByb3BlcnR5KCJkcmFnZ2FibGUiKSl7dGhpcy5zZXRIZWFk ZXIoIiYjMTYwOyIpO319ZnVuY3Rpb24gUihWLFUsVyl7dmFyIFo9V1swXSxYPVdb MV0sWT10aGlzLmNmZyxhPVkuZ2V0UHJvcGVydHkoIndpZHRoIik7aWYoYT09WCl7 WS5zZXRQcm9wZXJ0eSgid2lkdGgiLFopO310aGlzLnVuc3Vic2NyaWJlKCJoaWRl IixSLFcpO31mdW5jdGlvbiBCKFYsVSl7dmFyIFksWCxXO2lmKFApe1k9dGhpcy5j Zmc7WD1ZLmdldFByb3BlcnR5KCJ3aWR0aCIpO2lmKCFYfHxYPT0iYXV0byIpe1c9 KHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCsicHgiKTtZLnNldFByb3BlcnR5KCJ3 aWR0aCIsVyk7dGhpcy5zdWJzY3JpYmUoImhpZGUiLFIsWyhYfHwiIiksV10pO319 fVlBSE9PLmV4dGVuZChPLEgse2luaXQ6ZnVuY3Rpb24oVixVKXtPLnN1cGVyY2xh c3MuaW5pdC5jYWxsKHRoaXMsVik7dGhpcy5iZWZvcmVJbml0RXZlbnQuZmlyZShP KTtBLmFkZENsYXNzKHRoaXMuZWxlbWVudCxPLkNTU19QQU5FTCk7dGhpcy5idWls ZFdyYXBwZXIoKTtpZihVKXt0aGlzLmNmZy5hcHBseUNvbmZpZyhVLHRydWUpO310 aGlzLnN1YnNjcmliZSgic2hvd01hc2siLHRoaXMuX2FkZEZvY3VzSGFuZGxlcnMp O3RoaXMuc3Vic2NyaWJlKCJoaWRlTWFzayIsdGhpcy5fcmVtb3ZlRm9jdXNIYW5k bGVycyk7dGhpcy5zdWJzY3JpYmUoImJlZm9yZVJlbmRlciIsSik7dGhpcy5zdWJz Y3JpYmUoInJlbmRlciIsZnVuY3Rpb24oKXt0aGlzLnNldEZpcnN0TGFzdEZvY3Vz YWJsZSgpO3RoaXMuc3Vic2NyaWJlKCJjaGFuZ2VDb250ZW50Iix0aGlzLnNldEZp cnN0TGFzdEZvY3VzYWJsZSk7fSk7dGhpcy5zdWJzY3JpYmUoInNob3ciLHRoaXMu Zm9jdXNGaXJzdCk7dGhpcy5pbml0RXZlbnQuZmlyZShPKTt9LF9vbkVsZW1lbnRG b2N1czpmdW5jdGlvbihaKXtpZihTPT09dGhpcyl7dmFyIFk9VC5nZXRUYXJnZXQo WiksWD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsVj0oWSE9PVgmJlkhPT13aW5k b3cpO2lmKFYmJlkhPT10aGlzLmVsZW1lbnQmJlkhPT10aGlzLm1hc2smJiFBLmlz QW5jZXN0b3IodGhpcy5lbGVtZW50LFkpKXt0cnl7aWYodGhpcy5maXJzdEVsZW1l bnQpe3RoaXMuZmlyc3RFbGVtZW50LmZvY3VzKCk7fWVsc2V7aWYodGhpcy5fbW9k YWxGb2N1cyl7dGhpcy5fbW9kYWxGb2N1cy5mb2N1cygpO31lbHNle3RoaXMuaW5u ZXJFbGVtZW50LmZvY3VzKCk7fX19Y2F0Y2goVyl7dHJ5e2lmKFYmJlkhPT1kb2N1 bWVudC5ib2R5KXtZLmJsdXIoKTt9fWNhdGNoKFUpe319fX19LF9hZGRGb2N1c0hh bmRsZXJzOmZ1bmN0aW9uKFYsVSl7aWYoIXRoaXMuZmlyc3RFbGVtZW50KXtpZihM LndlYmtpdHx8TC5vcGVyYSl7aWYoIXRoaXMuX21vZGFsRm9jdXMpe3RoaXMuX2Ny ZWF0ZUhpZGRlbkZvY3VzRWxlbWVudCgpO319ZWxzZXt0aGlzLmlubmVyRWxlbWVu dC50YWJJbmRleD0wO319dGhpcy5zZXRUYWJMb29wKHRoaXMuZmlyc3RFbGVtZW50 LHRoaXMubGFzdEVsZW1lbnQpO1Qub25Gb2N1cyhkb2N1bWVudC5kb2N1bWVudEVs ZW1lbnQsdGhpcy5fb25FbGVtZW50Rm9jdXMsdGhpcyx0cnVlKTtTPXRoaXM7fSxf Y3JlYXRlSGlkZGVuRm9jdXNFbGVtZW50OmZ1bmN0aW9uKCl7dmFyIFU9ZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7VS5zdHlsZS5oZWlnaHQ9IjFweCI7 VS5zdHlsZS53aWR0aD0iMXB4IjtVLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7 VS5zdHlsZS5sZWZ0PSItMTAwMDBlbSI7VS5zdHlsZS5vcGFjaXR5PTA7VS50YWJJ bmRleD0tMTt0aGlzLmlubmVyRWxlbWVudC5hcHBlbmRDaGlsZChVKTt0aGlzLl9t b2RhbEZvY3VzPVU7fSxfcmVtb3ZlRm9jdXNIYW5kbGVyczpmdW5jdGlvbihWLFUp e1QucmVtb3ZlRm9jdXNMaXN0ZW5lcihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQs dGhpcy5fb25FbGVtZW50Rm9jdXMsdGhpcyk7aWYoUz09dGhpcyl7Uz1udWxsO319 LGZvY3VzRmlyc3Q6ZnVuY3Rpb24oVyxVLFkpe3ZhciBWPXRoaXMuZmlyc3RFbGVt ZW50O2lmKFUmJlVbMV0pe1Quc3RvcEV2ZW50KFVbMV0pO31pZihWKXt0cnl7Vi5m b2N1cygpO31jYXRjaChYKXt9fX0sZm9jdXNMYXN0OmZ1bmN0aW9uKFcsVSxZKXt2 YXIgVj10aGlzLmxhc3RFbGVtZW50O2lmKFUmJlVbMV0pe1Quc3RvcEV2ZW50KFVb MV0pO31pZihWKXt0cnl7Vi5mb2N1cygpO31jYXRjaChYKXt9fX0sc2V0VGFiTG9v cDpmdW5jdGlvbihYLFope3ZhciBWPXRoaXMucHJldmVudEJhY2tUYWIsVz10aGlz LnByZXZlbnRUYWJPdXQsVT10aGlzLnNob3dFdmVudCxZPXRoaXMuaGlkZUV2ZW50 O2lmKFYpe1YuZGlzYWJsZSgpO1UudW5zdWJzY3JpYmUoVi5lbmFibGUsVik7WS51 bnN1YnNjcmliZShWLmRpc2FibGUsVik7Vj10aGlzLnByZXZlbnRCYWNrVGFiPW51 bGw7fWlmKFcpe1cuZGlzYWJsZSgpO1UudW5zdWJzY3JpYmUoVy5lbmFibGUsVyk7 WS51bnN1YnNjcmliZShXLmRpc2FibGUsVyk7Vz10aGlzLnByZXZlbnRUYWJPdXQ9 bnVsbDt9aWYoWCl7dGhpcy5wcmV2ZW50QmFja1RhYj1uZXcgSyhYLHtzaGlmdDp0 cnVlLGtleXM6OX0se2ZuOnRoaXMuZm9jdXNMYXN0LHNjb3BlOnRoaXMsY29ycmVj dFNjb3BlOnRydWV9KTtWPXRoaXMucHJldmVudEJhY2tUYWI7VS5zdWJzY3JpYmUo Vi5lbmFibGUsVix0cnVlKTtZLnN1YnNjcmliZShWLmRpc2FibGUsVix0cnVlKTt9 aWYoWil7dGhpcy5wcmV2ZW50VGFiT3V0PW5ldyBLKFose3NoaWZ0OmZhbHNlLGtl eXM6OX0se2ZuOnRoaXMuZm9jdXNGaXJzdCxzY29wZTp0aGlzLGNvcnJlY3RTY29w ZTp0cnVlfSk7Vz10aGlzLnByZXZlbnRUYWJPdXQ7VS5zdWJzY3JpYmUoVy5lbmFi bGUsVyx0cnVlKTtZLnN1YnNjcmliZShXLmRpc2FibGUsVyx0cnVlKTt9fSxnZXRG b2N1c2FibGVFbGVtZW50czpmdW5jdGlvbihVKXtVPVV8fHRoaXMuaW5uZXJFbGVt ZW50O3ZhciBYPXt9O2Zvcih2YXIgVz0wO1c8Ty5GT0NVU0FCTEUubGVuZ3RoO1cr Kyl7WFtPLkZPQ1VTQUJMRVtXXV09dHJ1ZTt9ZnVuY3Rpb24gVihZKXtpZihZLmZv Y3VzJiZZLnR5cGUhPT0iaGlkZGVuIiYmIVkuZGlzYWJsZWQmJlhbWS50YWdOYW1l LnRvTG93ZXJDYXNlKCldKXtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO31yZXR1 cm4gQS5nZXRFbGVtZW50c0J5KFYsbnVsbCxVKTt9LHNldEZpcnN0TGFzdEZvY3Vz YWJsZTpmdW5jdGlvbigpe3RoaXMuZmlyc3RFbGVtZW50PW51bGw7dGhpcy5sYXN0 RWxlbWVudD1udWxsO3ZhciBVPXRoaXMuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKTt0 aGlzLmZvY3VzYWJsZUVsZW1lbnRzPVU7aWYoVS5sZW5ndGg+MCl7dGhpcy5maXJz dEVsZW1lbnQ9VVswXTt0aGlzLmxhc3RFbGVtZW50PVVbVS5sZW5ndGgtMV07fWlm KHRoaXMuY2ZnLmdldFByb3BlcnR5KCJtb2RhbCIpKXt0aGlzLnNldFRhYkxvb3Ao dGhpcy5maXJzdEVsZW1lbnQsdGhpcy5sYXN0RWxlbWVudCk7fX0saW5pdEV2ZW50 czpmdW5jdGlvbigpe08uc3VwZXJjbGFzcy5pbml0RXZlbnRzLmNhbGwodGhpcyk7 dmFyIFU9TS5MSVNUO3RoaXMuc2hvd01hc2tFdmVudD10aGlzLmNyZWF0ZUV2ZW50 KEQuU0hPV19NQVNLKTt0aGlzLnNob3dNYXNrRXZlbnQuc2lnbmF0dXJlPVU7dGhp cy5oaWRlTWFza0V2ZW50PXRoaXMuY3JlYXRlRXZlbnQoRC5ISURFX01BU0spO3Ro aXMuaGlkZU1hc2tFdmVudC5zaWduYXR1cmU9VTt0aGlzLmRyYWdFdmVudD10aGlz LmNyZWF0ZUV2ZW50KEQuRFJBRyk7dGhpcy5kcmFnRXZlbnQuc2lnbmF0dXJlPVU7 fSxpbml0RGVmYXVsdENvbmZpZzpmdW5jdGlvbigpe08uc3VwZXJjbGFzcy5pbml0 RGVmYXVsdENvbmZpZy5jYWxsKHRoaXMpO3RoaXMuY2ZnLmFkZFByb3BlcnR5KE4u Q0xPU0Uua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnQ2xvc2UsdmFsdWU6Ti5DTE9T RS52YWx1ZSx2YWxpZGF0b3I6Ti5DTE9TRS52YWxpZGF0b3Isc3VwZXJjZWRlczpO LkNMT1NFLnN1cGVyY2VkZXN9KTt0aGlzLmNmZy5hZGRQcm9wZXJ0eShOLkRSQUdH QUJMRS5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdEcmFnZ2FibGUsdmFsdWU6KEYu REQpP3RydWU6ZmFsc2UsdmFsaWRhdG9yOk4uRFJBR0dBQkxFLnZhbGlkYXRvcixz dXBlcmNlZGVzOk4uRFJBR0dBQkxFLnN1cGVyY2VkZXN9KTt0aGlzLmNmZy5hZGRQ cm9wZXJ0eShOLkRSQUdfT05MWS5rZXkse3ZhbHVlOk4uRFJBR19PTkxZLnZhbHVl LHZhbGlkYXRvcjpOLkRSQUdfT05MWS52YWxpZGF0b3Isc3VwZXJjZWRlczpOLkRS QUdfT05MWS5zdXBlcmNlZGVzfSk7dGhpcy5jZmcuYWRkUHJvcGVydHkoTi5VTkRF UkxBWS5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdVbmRlcmxheSx2YWx1ZTpOLlVO REVSTEFZLnZhbHVlLHN1cGVyY2VkZXM6Ti5VTkRFUkxBWS5zdXBlcmNlZGVzfSk7 dGhpcy5jZmcuYWRkUHJvcGVydHkoTi5NT0RBTC5rZXkse2hhbmRsZXI6dGhpcy5j b25maWdNb2RhbCx2YWx1ZTpOLk1PREFMLnZhbHVlLHZhbGlkYXRvcjpOLk1PREFM LnZhbGlkYXRvcixzdXBlcmNlZGVzOk4uTU9EQUwuc3VwZXJjZWRlc30pO3RoaXMu Y2ZnLmFkZFByb3BlcnR5KE4uS0VZX0xJU1RFTkVSUy5rZXkse2hhbmRsZXI6dGhp cy5jb25maWdLZXlMaXN0ZW5lcnMsc3VwcHJlc3NFdmVudDpOLktFWV9MSVNURU5F UlMuc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOk4uS0VZX0xJU1RFTkVSUy5zdXBl cmNlZGVzfSk7dGhpcy5jZmcuYWRkUHJvcGVydHkoTi5TVFJJTkdTLmtleSx7dmFs dWU6Ti5TVFJJTkdTLnZhbHVlLGhhbmRsZXI6dGhpcy5jb25maWdTdHJpbmdzLHZh bGlkYXRvcjpOLlNUUklOR1MudmFsaWRhdG9yLHN1cGVyY2VkZXM6Ti5TVFJJTkdT LnN1cGVyY2VkZXN9KTt9LGNvbmZpZ0Nsb3NlOmZ1bmN0aW9uKFgsVixZKXt2YXIg Wj1WWzBdLFc9dGhpcy5jbG9zZSxVPXRoaXMuY2ZnLmdldFByb3BlcnR5KCJzdHJp bmdzIik7aWYoWil7aWYoIVcpe2lmKCFDKXtDPWRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoImEiKTtDLmNsYXNzTmFtZT0iY29udGFpbmVyLWNsb3NlIjtDLmhyZWY9IiMi O31XPUMuY2xvbmVOb2RlKHRydWUpO3RoaXMuaW5uZXJFbGVtZW50LmFwcGVuZENo aWxkKFcpO1cuaW5uZXJIVE1MPShVJiZVLmNsb3NlKT9VLmNsb3NlOiImIzE2MDsi O1Qub24oVywiY2xpY2siLHRoaXMuX2RvQ2xvc2UsdGhpcyx0cnVlKTt0aGlzLmNs b3NlPVc7fWVsc2V7Vy5zdHlsZS5kaXNwbGF5PSJibG9jayI7fX1lbHNle2lmKFcp e1cuc3R5bGUuZGlzcGxheT0ibm9uZSI7fX19LF9kb0Nsb3NlOmZ1bmN0aW9uKFUp e1QucHJldmVudERlZmF1bHQoVSk7dGhpcy5oaWRlKCk7fSxjb25maWdEcmFnZ2Fi bGU6ZnVuY3Rpb24oVixVLFcpe3ZhciBYPVVbMF07aWYoWCl7aWYoIUYuREQpe3Ro aXMuY2ZnLnNldFByb3BlcnR5KCJkcmFnZ2FibGUiLGZhbHNlKTtyZXR1cm47fWlm KHRoaXMuaGVhZGVyKXtBLnNldFN0eWxlKHRoaXMuaGVhZGVyLCJjdXJzb3IiLCJt b3ZlIik7dGhpcy5yZWdpc3RlckRyYWdEcm9wKCk7fXRoaXMuc3Vic2NyaWJlKCJi ZWZvcmVTaG93IixCKTt9ZWxzZXtpZih0aGlzLmRkKXt0aGlzLmRkLnVucmVnKCk7 fWlmKHRoaXMuaGVhZGVyKXtBLnNldFN0eWxlKHRoaXMuaGVhZGVyLCJjdXJzb3Ii LCJhdXRvIik7fXRoaXMudW5zdWJzY3JpYmUoImJlZm9yZVNob3ciLEIpO319LGNv bmZpZ1VuZGVybGF5OmZ1bmN0aW9uKGQsYyxaKXt2YXIgYj0odGhpcy5wbGF0Zm9y bT09Im1hYyImJkwuZ2Vja28pLGU9Y1swXS50b0xvd2VyQ2FzZSgpLFY9dGhpcy51 bmRlcmxheSxXPXRoaXMuZWxlbWVudDtmdW5jdGlvbiBYKCl7dmFyIGY9ZmFsc2U7 aWYoIVYpe2lmKCFRKXtRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1Eu Y2xhc3NOYW1lPSJ1bmRlcmxheSI7fVY9US5jbG9uZU5vZGUoZmFsc2UpO3RoaXMu ZWxlbWVudC5hcHBlbmRDaGlsZChWKTt0aGlzLnVuZGVybGF5PVY7aWYoUCl7dGhp cy5zaXplVW5kZXJsYXkoKTt0aGlzLmNmZy5zdWJzY3JpYmVUb0NvbmZpZ0V2ZW50 KCJ3aWR0aCIsdGhpcy5zaXplVW5kZXJsYXkpO3RoaXMuY2ZnLnN1YnNjcmliZVRv Q29uZmlnRXZlbnQoImhlaWdodCIsdGhpcy5zaXplVW5kZXJsYXkpO3RoaXMuY2hh bmdlQ29udGVudEV2ZW50LnN1YnNjcmliZSh0aGlzLnNpemVVbmRlcmxheSk7WUFI T08ud2lkZ2V0Lk1vZHVsZS50ZXh0UmVzaXplRXZlbnQuc3Vic2NyaWJlKHRoaXMu c2l6ZVVuZGVybGF5LHRoaXMsdHJ1ZSk7fWlmKEwud2Via2l0JiZMLndlYmtpdDw0 MjApe3RoaXMuY2hhbmdlQ29udGVudEV2ZW50LnN1YnNjcmliZSh0aGlzLmZvcmNl VW5kZXJsYXlSZWRyYXcpO31mPXRydWU7fX1mdW5jdGlvbiBhKCl7dmFyIGY9WC5j YWxsKHRoaXMpO2lmKCFmJiZQKXt0aGlzLnNpemVVbmRlcmxheSgpO310aGlzLl91 bmRlcmxheURlZmVycmVkPWZhbHNlO3RoaXMuYmVmb3JlU2hvd0V2ZW50LnVuc3Vi c2NyaWJlKGEpO31mdW5jdGlvbiBZKCl7aWYodGhpcy5fdW5kZXJsYXlEZWZlcnJl ZCl7dGhpcy5iZWZvcmVTaG93RXZlbnQudW5zdWJzY3JpYmUoYSk7dGhpcy5fdW5k ZXJsYXlEZWZlcnJlZD1mYWxzZTt9aWYoVil7dGhpcy5jZmcudW5zdWJzY3JpYmVG cm9tQ29uZmlnRXZlbnQoIndpZHRoIix0aGlzLnNpemVVbmRlcmxheSk7dGhpcy5j ZmcudW5zdWJzY3JpYmVGcm9tQ29uZmlnRXZlbnQoImhlaWdodCIsdGhpcy5zaXpl VW5kZXJsYXkpO3RoaXMuY2hhbmdlQ29udGVudEV2ZW50LnVuc3Vic2NyaWJlKHRo aXMuc2l6ZVVuZGVybGF5KTt0aGlzLmNoYW5nZUNvbnRlbnRFdmVudC51bnN1YnNj cmliZSh0aGlzLmZvcmNlVW5kZXJsYXlSZWRyYXcpO1lBSE9PLndpZGdldC5Nb2R1 bGUudGV4dFJlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc2l6ZVVuZGVybGF5 LHRoaXMsdHJ1ZSk7dGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkKFYpO3RoaXMudW5k ZXJsYXk9bnVsbDt9fXN3aXRjaChlKXtjYXNlInNoYWRvdyI6QS5yZW1vdmVDbGFz cyhXLCJtYXR0ZSIpO0EuYWRkQ2xhc3MoVywic2hhZG93Iik7YnJlYWs7Y2FzZSJt YXR0ZSI6aWYoIWIpe1kuY2FsbCh0aGlzKTt9QS5yZW1vdmVDbGFzcyhXLCJzaGFk b3ciKTtBLmFkZENsYXNzKFcsIm1hdHRlIik7YnJlYWs7ZGVmYXVsdDppZighYil7 WS5jYWxsKHRoaXMpO31BLnJlbW92ZUNsYXNzKFcsInNoYWRvdyIpO0EucmVtb3Zl Q2xhc3MoVywibWF0dGUiKTticmVhazt9aWYoKGU9PSJzaGFkb3ciKXx8KGImJiFW KSl7aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoInZpc2libGUiKSl7dmFyIFU9WC5j YWxsKHRoaXMpO2lmKCFVJiZQKXt0aGlzLnNpemVVbmRlcmxheSgpO319ZWxzZXtp ZighdGhpcy5fdW5kZXJsYXlEZWZlcnJlZCl7dGhpcy5iZWZvcmVTaG93RXZlbnQu c3Vic2NyaWJlKGEpO3RoaXMuX3VuZGVybGF5RGVmZXJyZWQ9dHJ1ZTt9fX19LGNv bmZpZ01vZGFsOmZ1bmN0aW9uKFYsVSxYKXt2YXIgVz1VWzBdO2lmKFcpe2lmKCF0 aGlzLl9oYXNNb2RhbGl0eUV2ZW50TGlzdGVuZXJzKXt0aGlzLnN1YnNjcmliZSgi YmVmb3JlU2hvdyIsdGhpcy5idWlsZE1hc2spO3RoaXMuc3Vic2NyaWJlKCJiZWZv cmVTaG93Iix0aGlzLmJyaW5nVG9Ub3ApO3RoaXMuc3Vic2NyaWJlKCJiZWZvcmVT aG93Iix0aGlzLnNob3dNYXNrKTt0aGlzLnN1YnNjcmliZSgiaGlkZSIsdGhpcy5o aWRlTWFzayk7SC53aW5kb3dSZXNpemVFdmVudC5zdWJzY3JpYmUodGhpcy5zaXpl TWFzayx0aGlzLHRydWUpO3RoaXMuX2hhc01vZGFsaXR5RXZlbnRMaXN0ZW5lcnM9 dHJ1ZTt9fWVsc2V7aWYodGhpcy5faGFzTW9kYWxpdHlFdmVudExpc3RlbmVycyl7 aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoInZpc2libGUiKSl7dGhpcy5oaWRlTWFz aygpO3RoaXMucmVtb3ZlTWFzaygpO310aGlzLnVuc3Vic2NyaWJlKCJiZWZvcmVT aG93Iix0aGlzLmJ1aWxkTWFzayk7dGhpcy51bnN1YnNjcmliZSgiYmVmb3JlU2hv dyIsdGhpcy5icmluZ1RvVG9wKTt0aGlzLnVuc3Vic2NyaWJlKCJiZWZvcmVTaG93 Iix0aGlzLnNob3dNYXNrKTt0aGlzLnVuc3Vic2NyaWJlKCJoaWRlIix0aGlzLmhp ZGVNYXNrKTtILndpbmRvd1Jlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc2l6 ZU1hc2ssdGhpcyk7dGhpcy5faGFzTW9kYWxpdHlFdmVudExpc3RlbmVycz1mYWxz ZTt9fX0scmVtb3ZlTWFzazpmdW5jdGlvbigpe3ZhciBWPXRoaXMubWFzayxVO2lm KFYpe3RoaXMuaGlkZU1hc2soKTtVPVYucGFyZW50Tm9kZTtpZihVKXtVLnJlbW92 ZUNoaWxkKFYpO310aGlzLm1hc2s9bnVsbDt9fSxjb25maWdLZXlMaXN0ZW5lcnM6 ZnVuY3Rpb24oWCxVLGEpe3ZhciBXPVVbMF0sWixZLFY7aWYoVyl7aWYoVyBpbnN0 YW5jZW9mIEFycmF5KXtZPVcubGVuZ3RoO2ZvcihWPTA7VjxZO1YrKyl7Wj1XW1Zd O2lmKCFJLmFscmVhZHlTdWJzY3JpYmVkKHRoaXMuc2hvd0V2ZW50LFouZW5hYmxl LFopKXt0aGlzLnNob3dFdmVudC5zdWJzY3JpYmUoWi5lbmFibGUsWix0cnVlKTt9 aWYoIUkuYWxyZWFkeVN1YnNjcmliZWQodGhpcy5oaWRlRXZlbnQsWi5kaXNhYmxl LFopKXt0aGlzLmhpZGVFdmVudC5zdWJzY3JpYmUoWi5kaXNhYmxlLFosdHJ1ZSk7 dGhpcy5kZXN0cm95RXZlbnQuc3Vic2NyaWJlKFouZGlzYWJsZSxaLHRydWUpO319 fWVsc2V7aWYoIUkuYWxyZWFkeVN1YnNjcmliZWQodGhpcy5zaG93RXZlbnQsVy5l bmFibGUsVykpe3RoaXMuc2hvd0V2ZW50LnN1YnNjcmliZShXLmVuYWJsZSxXLHRy dWUpO31pZighSS5hbHJlYWR5U3Vic2NyaWJlZCh0aGlzLmhpZGVFdmVudCxXLmRp c2FibGUsVykpe3RoaXMuaGlkZUV2ZW50LnN1YnNjcmliZShXLmRpc2FibGUsVyx0 cnVlKTt0aGlzLmRlc3Ryb3lFdmVudC5zdWJzY3JpYmUoVy5kaXNhYmxlLFcsdHJ1 ZSk7fX19fSxjb25maWdTdHJpbmdzOmZ1bmN0aW9uKFYsVSxXKXt2YXIgWD1FLm1l cmdlKE4uU1RSSU5HUy52YWx1ZSxVWzBdKTt0aGlzLmNmZy5zZXRQcm9wZXJ0eShO LlNUUklOR1Mua2V5LFgsdHJ1ZSk7fSxjb25maWdIZWlnaHQ6ZnVuY3Rpb24oWCxW LFkpe3ZhciBVPVZbMF0sVz10aGlzLmlubmVyRWxlbWVudDtBLnNldFN0eWxlKFcs ImhlaWdodCIsVSk7dGhpcy5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIpO30sX2F1 dG9GaWxsT25IZWlnaHRDaGFuZ2U6ZnVuY3Rpb24oWCxWLFcpe08uc3VwZXJjbGFz cy5fYXV0b0ZpbGxPbkhlaWdodENoYW5nZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7 aWYoUCl7dmFyIFU9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VS5zaXplVW5k ZXJsYXkoKTt9LDApO319LGNvbmZpZ1dpZHRoOmZ1bmN0aW9uKFgsVSxZKXt2YXIg Vz1VWzBdLFY9dGhpcy5pbm5lckVsZW1lbnQ7QS5zZXRTdHlsZShWLCJ3aWR0aCIs Vyk7dGhpcy5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIpO30sY29uZmlnekluZGV4 OmZ1bmN0aW9uKFYsVSxYKXtPLnN1cGVyY2xhc3MuY29uZmlnekluZGV4LmNhbGwo dGhpcyxWLFUsWCk7aWYodGhpcy5tYXNrfHx0aGlzLmNmZy5nZXRQcm9wZXJ0eSgi bW9kYWwiKT09PXRydWUpe3ZhciBXPUEuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCJ6 SW5kZXgiKTtpZighV3x8aXNOYU4oVykpe1c9MDt9aWYoVz09PTApe3RoaXMuY2Zn LnNldFByb3BlcnR5KCJ6SW5kZXgiLDEpO31lbHNle3RoaXMuc3RhY2tNYXNrKCk7 fX19LGJ1aWxkV3JhcHBlcjpmdW5jdGlvbigpe3ZhciBXPXRoaXMuZWxlbWVudC5w YXJlbnROb2RlLFU9dGhpcy5lbGVtZW50LFY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVu dCgiZGl2Iik7Vi5jbGFzc05hbWU9Ty5DU1NfUEFORUxfQ09OVEFJTkVSO1YuaWQ9 VS5pZCsiX2MiO2lmKFcpe1cuaW5zZXJ0QmVmb3JlKFYsVSk7fVYuYXBwZW5kQ2hp bGQoVSk7dGhpcy5lbGVtZW50PVY7dGhpcy5pbm5lckVsZW1lbnQ9VTtBLnNldFN0 eWxlKHRoaXMuaW5uZXJFbGVtZW50LCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpO30s c2l6ZVVuZGVybGF5OmZ1bmN0aW9uKCl7dmFyIFY9dGhpcy51bmRlcmxheSxVO2lm KFYpe1U9dGhpcy5lbGVtZW50O1Yuc3R5bGUud2lkdGg9VS5vZmZzZXRXaWR0aCsi cHgiO1Yuc3R5bGUuaGVpZ2h0PVUub2Zmc2V0SGVpZ2h0KyJweCI7fX0scmVnaXN0 ZXJEcmFnRHJvcDpmdW5jdGlvbigpe3ZhciBWPXRoaXM7aWYodGhpcy5oZWFkZXIp e2lmKCFGLkREKXtyZXR1cm47fXZhciBVPSh0aGlzLmNmZy5nZXRQcm9wZXJ0eSgi ZHJhZ29ubHkiKT09PXRydWUpO3RoaXMuZGQ9bmV3IEYuREQodGhpcy5lbGVtZW50 LmlkLHRoaXMuaWQse2RyYWdPbmx5OlV9KTtpZighdGhpcy5oZWFkZXIuaWQpe3Ro aXMuaGVhZGVyLmlkPXRoaXMuaWQrIl9oIjt9dGhpcy5kZC5zdGFydERyYWc9ZnVu Y3Rpb24oKXt2YXIgWCxaLFcsYyxiLGE7aWYoWUFIT08uZW52LnVhLmllPT02KXtB LmFkZENsYXNzKFYuZWxlbWVudCwiZHJhZyIpO31pZihWLmNmZy5nZXRQcm9wZXJ0 eSgiY29uc3RyYWludG92aWV3cG9ydCIpKXt2YXIgWT1ILlZJRVdQT1JUX09GRlNF VDtYPVYuZWxlbWVudC5vZmZzZXRIZWlnaHQ7Wj1WLmVsZW1lbnQub2Zmc2V0V2lk dGg7Vz1BLmdldFZpZXdwb3J0V2lkdGgoKTtjPUEuZ2V0Vmlld3BvcnRIZWlnaHQo KTtiPUEuZ2V0RG9jdW1lbnRTY3JvbGxMZWZ0KCk7YT1BLmdldERvY3VtZW50U2Ny b2xsVG9wKCk7aWYoWCtZPGMpe3RoaXMubWluWT1hK1k7dGhpcy5tYXhZPWErYy1Y LVk7fWVsc2V7dGhpcy5taW5ZPWErWTt0aGlzLm1heFk9YStZO31pZihaK1k8Vyl7 dGhpcy5taW5YPWIrWTt0aGlzLm1heFg9YitXLVotWTt9ZWxzZXt0aGlzLm1pblg9 YitZO3RoaXMubWF4WD1iK1k7fXRoaXMuY29uc3RyYWluWD10cnVlO3RoaXMuY29u c3RyYWluWT10cnVlO31lbHNle3RoaXMuY29uc3RyYWluWD1mYWxzZTt0aGlzLmNv bnN0cmFpblk9ZmFsc2U7fVYuZHJhZ0V2ZW50LmZpcmUoInN0YXJ0RHJhZyIsYXJn dW1lbnRzKTt9O3RoaXMuZGQub25EcmFnPWZ1bmN0aW9uKCl7Vi5zeW5jUG9zaXRp b24oKTtWLmNmZy5yZWZpcmVFdmVudCgiaWZyYW1lIik7aWYodGhpcy5wbGF0Zm9y bT09Im1hYyImJllBSE9PLmVudi51YS5nZWNrbyl7dGhpcy5zaG93TWFjR2Vja29T Y3JvbGxiYXJzKCk7fVYuZHJhZ0V2ZW50LmZpcmUoIm9uRHJhZyIsYXJndW1lbnRz KTt9O3RoaXMuZGQuZW5kRHJhZz1mdW5jdGlvbigpe2lmKFlBSE9PLmVudi51YS5p ZT09Nil7QS5yZW1vdmVDbGFzcyhWLmVsZW1lbnQsImRyYWciKTt9Vi5kcmFnRXZl bnQuZmlyZSgiZW5kRHJhZyIsYXJndW1lbnRzKTtWLm1vdmVFdmVudC5maXJlKFYu Y2ZnLmdldFByb3BlcnR5KCJ4eSIpKTt9O3RoaXMuZGQuc2V0SGFuZGxlRWxJZCh0 aGlzLmhlYWRlci5pZCk7dGhpcy5kZC5hZGRJbnZhbGlkSGFuZGxlVHlwZSgiSU5Q VVQiKTt0aGlzLmRkLmFkZEludmFsaWRIYW5kbGVUeXBlKCJTRUxFQ1QiKTt0aGlz LmRkLmFkZEludmFsaWRIYW5kbGVUeXBlKCJURVhUQVJFQSIpO319LGJ1aWxkTWFz azpmdW5jdGlvbigpe3ZhciBVPXRoaXMubWFzaztpZighVSl7aWYoIUcpe0c9ZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ry5jbGFzc05hbWU9Im1hc2siO0cu aW5uZXJIVE1MPSImIzE2MDsiO31VPUcuY2xvbmVOb2RlKHRydWUpO1UuaWQ9dGhp cy5pZCsiX21hc2siO2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKFUsZG9jdW1l bnQuYm9keS5maXJzdENoaWxkKTt0aGlzLm1hc2s9VTtpZihZQUhPTy5lbnYudWEu Z2Vja28mJnRoaXMucGxhdGZvcm09PSJtYWMiKXtBLmFkZENsYXNzKHRoaXMubWFz aywiYmxvY2stc2Nyb2xsYmFycyIpO310aGlzLnN0YWNrTWFzaygpO319LGhpZGVN YXNrOmZ1bmN0aW9uKCl7aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoIm1vZGFsIikm JnRoaXMubWFzayl7dGhpcy5tYXNrLnN0eWxlLmRpc3BsYXk9Im5vbmUiO0EucmVt b3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwibWFza2VkIik7dGhpcy5oaWRlTWFza0V2 ZW50LmZpcmUoKTt9fSxzaG93TWFzazpmdW5jdGlvbigpe2lmKHRoaXMuY2ZnLmdl dFByb3BlcnR5KCJtb2RhbCIpJiZ0aGlzLm1hc2spe0EuYWRkQ2xhc3MoZG9jdW1l bnQuYm9keSwibWFza2VkIik7dGhpcy5zaXplTWFzaygpO3RoaXMubWFzay5zdHls ZS5kaXNwbGF5PSJibG9jayI7dGhpcy5zaG93TWFza0V2ZW50LmZpcmUoKTt9fSxz aXplTWFzazpmdW5jdGlvbigpe2lmKHRoaXMubWFzayl7dmFyIFY9dGhpcy5tYXNr LFc9QS5nZXRWaWV3cG9ydFdpZHRoKCksVT1BLmdldFZpZXdwb3J0SGVpZ2h0KCk7 aWYoVi5vZmZzZXRIZWlnaHQ+VSl7Vi5zdHlsZS5oZWlnaHQ9VSsicHgiO31pZihW Lm9mZnNldFdpZHRoPlcpe1Yuc3R5bGUud2lkdGg9VysicHgiO31WLnN0eWxlLmhl aWdodD1BLmdldERvY3VtZW50SGVpZ2h0KCkrInB4IjtWLnN0eWxlLndpZHRoPUEu Z2V0RG9jdW1lbnRXaWR0aCgpKyJweCI7fX0sc3RhY2tNYXNrOmZ1bmN0aW9uKCl7 aWYodGhpcy5tYXNrKXt2YXIgVT1BLmdldFN0eWxlKHRoaXMuZWxlbWVudCwieklu ZGV4Iik7aWYoIVlBSE9PLmxhbmcuaXNVbmRlZmluZWQoVSkmJiFpc05hTihVKSl7 QS5zZXRTdHlsZSh0aGlzLm1hc2ssInpJbmRleCIsVS0xKTt9fX0scmVuZGVyOmZ1 bmN0aW9uKFUpe3JldHVybiBPLnN1cGVyY2xhc3MucmVuZGVyLmNhbGwodGhpcyxV LHRoaXMuaW5uZXJFbGVtZW50KTt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtILndpbmRv d1Jlc2l6ZUV2ZW50LnVuc3Vic2NyaWJlKHRoaXMuc2l6ZU1hc2ssdGhpcyk7dGhp cy5yZW1vdmVNYXNrKCk7aWYodGhpcy5jbG9zZSl7VC5wdXJnZUVsZW1lbnQodGhp cy5jbG9zZSk7fU8uc3VwZXJjbGFzcy5kZXN0cm95LmNhbGwodGhpcyk7fSxmb3Jj ZVVuZGVybGF5UmVkcmF3OmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy51bmRlcmxheTtB LmFkZENsYXNzKFUsInl1aS1mb3JjZS1yZWRyYXciKTtzZXRUaW1lb3V0KGZ1bmN0 aW9uKCl7QS5yZW1vdmVDbGFzcyhVLCJ5dWktZm9yY2UtcmVkcmF3Iik7fSwwKTt9 LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlBhbmVsICIrdGhpcy5pZDt9fSk7 fSgpKTsoZnVuY3Rpb24oKXtZQUhPTy53aWRnZXQuRGlhbG9nPWZ1bmN0aW9uKEos SSl7WUFIT08ud2lkZ2V0LkRpYWxvZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNh bGwodGhpcyxKLEkpO307dmFyIEI9WUFIT08udXRpbC5FdmVudCxHPVlBSE9PLnV0 aWwuQ3VzdG9tRXZlbnQsRT1ZQUhPTy51dGlsLkRvbSxBPVlBSE9PLndpZGdldC5E aWFsb2csRj1ZQUhPTy5sYW5nLEg9eyJCRUZPUkVfU1VCTUlUIjoiYmVmb3JlU3Vi bWl0IiwiU1VCTUlUIjoic3VibWl0IiwiTUFOVUFMX1NVQk1JVCI6Im1hbnVhbFN1 Ym1pdCIsIkFTWU5DX1NVQk1JVCI6ImFzeW5jU3VibWl0IiwiRk9STV9TVUJNSVQi OiJmb3JtU3VibWl0IiwiQ0FOQ0VMIjoiY2FuY2VsIn0sQz17IlBPU1RfTUVUSE9E Ijp7a2V5OiJwb3N0bWV0aG9kIix2YWx1ZToiYXN5bmMifSwiUE9TVF9EQVRBIjp7 a2V5OiJwb3N0ZGF0YSIsdmFsdWU6bnVsbH0sIkJVVFRPTlMiOntrZXk6ImJ1dHRv bnMiLHZhbHVlOiJub25lIixzdXBlcmNlZGVzOlsidmlzaWJsZSJdfSwiSElERUFG VEVSU1VCTUlUIjp7a2V5OiJoaWRlYWZ0ZXJzdWJtaXQiLHZhbHVlOnRydWV9fTtB LkNTU19ESUFMT0c9Inl1aS1kaWFsb2ciO2Z1bmN0aW9uIEQoKXt2YXIgTD10aGlz Ll9hQnV0dG9ucyxKLEssSTtpZihGLmlzQXJyYXkoTCkpe0o9TC5sZW5ndGg7aWYo Sj4wKXtJPUotMTtkb3tLPUxbSV07aWYoWUFIT08ud2lkZ2V0LkJ1dHRvbiYmSyBp bnN0YW5jZW9mIFlBSE9PLndpZGdldC5CdXR0b24pe0suZGVzdHJveSgpO31lbHNl e2lmKEsudGFnTmFtZS50b1VwcGVyQ2FzZSgpPT0iQlVUVE9OIil7Qi5wdXJnZUVs ZW1lbnQoSyk7Qi5wdXJnZUVsZW1lbnQoSyxmYWxzZSk7fX19d2hpbGUoSS0tKTt9 fX1ZQUhPTy5leHRlbmQoQSxZQUhPTy53aWRnZXQuUGFuZWwse2Zvcm06bnVsbCxp bml0RGVmYXVsdENvbmZpZzpmdW5jdGlvbigpe0Euc3VwZXJjbGFzcy5pbml0RGVm YXVsdENvbmZpZy5jYWxsKHRoaXMpO3RoaXMuY2FsbGJhY2s9e3N1Y2Nlc3M6bnVs bCxmYWlsdXJlOm51bGwsYXJndW1lbnQ6bnVsbH07dGhpcy5jZmcuYWRkUHJvcGVy dHkoQy5QT1NUX01FVEhPRC5rZXkse2hhbmRsZXI6dGhpcy5jb25maWdQb3N0TWV0 aG9kLHZhbHVlOkMuUE9TVF9NRVRIT0QudmFsdWUsdmFsaWRhdG9yOmZ1bmN0aW9u KEkpe2lmKEkhPSJmb3JtIiYmSSE9ImFzeW5jIiYmSSE9Im5vbmUiJiZJIT0ibWFu dWFsIil7cmV0dXJuIGZhbHNlO31lbHNle3JldHVybiB0cnVlO319fSk7dGhpcy5j ZmcuYWRkUHJvcGVydHkoQy5QT1NUX0RBVEEua2V5LHt2YWx1ZTpDLlBPU1RfREFU QS52YWx1ZX0pO3RoaXMuY2ZnLmFkZFByb3BlcnR5KEMuSElERUFGVEVSU1VCTUlU LmtleSx7dmFsdWU6Qy5ISURFQUZURVJTVUJNSVQudmFsdWV9KTt0aGlzLmNmZy5h ZGRQcm9wZXJ0eShDLkJVVFRPTlMua2V5LHtoYW5kbGVyOnRoaXMuY29uZmlnQnV0 dG9ucyx2YWx1ZTpDLkJVVFRPTlMudmFsdWUsc3VwZXJjZWRlczpDLkJVVFRPTlMu c3VwZXJjZWRlc30pO30saW5pdEV2ZW50czpmdW5jdGlvbigpe0Euc3VwZXJjbGFz cy5pbml0RXZlbnRzLmNhbGwodGhpcyk7dmFyIEk9Ry5MSVNUO3RoaXMuYmVmb3Jl U3VibWl0RXZlbnQ9dGhpcy5jcmVhdGVFdmVudChILkJFRk9SRV9TVUJNSVQpO3Ro aXMuYmVmb3JlU3VibWl0RXZlbnQuc2lnbmF0dXJlPUk7dGhpcy5zdWJtaXRFdmVu dD10aGlzLmNyZWF0ZUV2ZW50KEguU1VCTUlUKTt0aGlzLnN1Ym1pdEV2ZW50LnNp Z25hdHVyZT1JO3RoaXMubWFudWFsU3VibWl0RXZlbnQ9dGhpcy5jcmVhdGVFdmVu dChILk1BTlVBTF9TVUJNSVQpO3RoaXMubWFudWFsU3VibWl0RXZlbnQuc2lnbmF0 dXJlPUk7dGhpcy5hc3luY1N1Ym1pdEV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoSC5B U1lOQ19TVUJNSVQpO3RoaXMuYXN5bmNTdWJtaXRFdmVudC5zaWduYXR1cmU9STt0 aGlzLmZvcm1TdWJtaXRFdmVudD10aGlzLmNyZWF0ZUV2ZW50KEguRk9STV9TVUJN SVQpO3RoaXMuZm9ybVN1Ym1pdEV2ZW50LnNpZ25hdHVyZT1JO3RoaXMuY2FuY2Vs RXZlbnQ9dGhpcy5jcmVhdGVFdmVudChILkNBTkNFTCk7dGhpcy5jYW5jZWxFdmVu dC5zaWduYXR1cmU9STt9LGluaXQ6ZnVuY3Rpb24oSixJKXtBLnN1cGVyY2xhc3Mu aW5pdC5jYWxsKHRoaXMsSik7dGhpcy5iZWZvcmVJbml0RXZlbnQuZmlyZShBKTtF LmFkZENsYXNzKHRoaXMuZWxlbWVudCxBLkNTU19ESUFMT0cpO3RoaXMuY2ZnLnNl dFByb3BlcnR5KCJ2aXNpYmxlIixmYWxzZSk7aWYoSSl7dGhpcy5jZmcuYXBwbHlD b25maWcoSSx0cnVlKTt9dGhpcy5zaG93RXZlbnQuc3Vic2NyaWJlKHRoaXMuZm9j dXNGaXJzdCx0aGlzLHRydWUpO3RoaXMuYmVmb3JlSGlkZUV2ZW50LnN1YnNjcmli ZSh0aGlzLmJsdXJCdXR0b25zLHRoaXMsdHJ1ZSk7dGhpcy5zdWJzY3JpYmUoImNo YW5nZUJvZHkiLHRoaXMucmVnaXN0ZXJGb3JtKTt0aGlzLmluaXRFdmVudC5maXJl KEEpO30sZG9TdWJtaXQ6ZnVuY3Rpb24oKXt2YXIgUD1ZQUhPTy51dGlsLkNvbm5l Y3QsUT10aGlzLmZvcm0sSz1mYWxzZSxOPWZhbHNlLFIsTSxMLEk7c3dpdGNoKHRo aXMuY2ZnLmdldFByb3BlcnR5KCJwb3N0bWV0aG9kIikpe2Nhc2UiYXN5bmMiOlI9 US5lbGVtZW50cztNPVIubGVuZ3RoO2lmKE0+MCl7TD1NLTE7ZG97aWYoUltMXS50 eXBlPT0iZmlsZSIpe0s9dHJ1ZTticmVhazt9fXdoaWxlKEwtLSk7fWlmKEsmJllB SE9PLmVudi51YS5pZSYmdGhpcy5pc1NlY3VyZSl7Tj10cnVlO31JPXRoaXMuX2dl dEZvcm1BdHRyaWJ1dGVzKFEpO1Auc2V0Rm9ybShRLEssTik7dmFyIEo9dGhpcy5j ZmcuZ2V0UHJvcGVydHkoInBvc3RkYXRhIik7dmFyIE89UC5hc3luY1JlcXVlc3Qo SS5tZXRob2QsSS5hY3Rpb24sdGhpcy5jYWxsYmFjayxKKTt0aGlzLmFzeW5jU3Vi bWl0RXZlbnQuZmlyZShPKTticmVhaztjYXNlImZvcm0iOlEuc3VibWl0KCk7dGhp cy5mb3JtU3VibWl0RXZlbnQuZmlyZSgpO2JyZWFrO2Nhc2Uibm9uZSI6Y2FzZSJt YW51YWwiOnRoaXMubWFudWFsU3VibWl0RXZlbnQuZmlyZSgpO2JyZWFrO319LF9n ZXRGb3JtQXR0cmlidXRlczpmdW5jdGlvbihLKXt2YXIgST17bWV0aG9kOm51bGws YWN0aW9uOm51bGx9O2lmKEspe2lmKEsuZ2V0QXR0cmlidXRlTm9kZSl7dmFyIEo9 Sy5nZXRBdHRyaWJ1dGVOb2RlKCJhY3Rpb24iKTt2YXIgTD1LLmdldEF0dHJpYnV0 ZU5vZGUoIm1ldGhvZCIpO2lmKEope0kuYWN0aW9uPUoudmFsdWU7fWlmKEwpe0ku bWV0aG9kPUwudmFsdWU7fX1lbHNle0kuYWN0aW9uPUsuZ2V0QXR0cmlidXRlKCJh Y3Rpb24iKTtJLm1ldGhvZD1LLmdldEF0dHJpYnV0ZSgibWV0aG9kIik7fX1JLm1l dGhvZD0oRi5pc1N0cmluZyhJLm1ldGhvZCk/SS5tZXRob2Q6IlBPU1QiKS50b1Vw cGVyQ2FzZSgpO0kuYWN0aW9uPUYuaXNTdHJpbmcoSS5hY3Rpb24pP0kuYWN0aW9u OiIiO3JldHVybiBJO30scmVnaXN0ZXJGb3JtOmZ1bmN0aW9uKCl7dmFyIEk9dGhp cy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmb3JtIilbMF07aWYodGhp cy5mb3JtKXtpZih0aGlzLmZvcm09PUkmJkUuaXNBbmNlc3Rvcih0aGlzLmVsZW1l bnQsdGhpcy5mb3JtKSl7cmV0dXJuO31lbHNle0IucHVyZ2VFbGVtZW50KHRoaXMu Zm9ybSk7dGhpcy5mb3JtPW51bGw7fX1pZighSSl7ST1kb2N1bWVudC5jcmVhdGVF bGVtZW50KCJmb3JtIik7SS5uYW1lPSJmcm1fIit0aGlzLmlkO3RoaXMuYm9keS5h cHBlbmRDaGlsZChJKTt9aWYoSSl7dGhpcy5mb3JtPUk7Qi5vbihJLCJzdWJtaXQi LHRoaXMuX3N1Ym1pdEhhbmRsZXIsdGhpcyx0cnVlKTt9fSxfc3VibWl0SGFuZGxl cjpmdW5jdGlvbihJKXtCLnN0b3BFdmVudChJKTt0aGlzLnN1Ym1pdCgpO3RoaXMu Zm9ybS5ibHVyKCk7fSxzZXRUYWJMb29wOmZ1bmN0aW9uKEksSil7ST1JfHx0aGlz LmZpcnN0QnV0dG9uO0o9dGhpcy5sYXN0QnV0dG9ufHxKO0Euc3VwZXJjbGFzcy5z ZXRUYWJMb29wLmNhbGwodGhpcyxJLEopO30sc2V0Rmlyc3RMYXN0Rm9jdXNhYmxl OmZ1bmN0aW9uKCl7QS5zdXBlcmNsYXNzLnNldEZpcnN0TGFzdEZvY3VzYWJsZS5j YWxsKHRoaXMpO3ZhciBKLEksSyxMPXRoaXMuZm9jdXNhYmxlRWxlbWVudHM7dGhp cy5maXJzdEZvcm1FbGVtZW50PW51bGw7dGhpcy5sYXN0Rm9ybUVsZW1lbnQ9bnVs bDtpZih0aGlzLmZvcm0mJkwmJkwubGVuZ3RoPjApe0k9TC5sZW5ndGg7Zm9yKEo9 MDtKPEk7KytKKXtLPUxbSl07aWYodGhpcy5mb3JtPT09Sy5mb3JtKXt0aGlzLmZp cnN0Rm9ybUVsZW1lbnQ9SzticmVhazt9fWZvcihKPUktMTtKPj0wOy0tSil7Sz1M W0pdO2lmKHRoaXMuZm9ybT09PUsuZm9ybSl7dGhpcy5sYXN0Rm9ybUVsZW1lbnQ9 SzticmVhazt9fX19LGNvbmZpZ0Nsb3NlOmZ1bmN0aW9uKEosSSxLKXtBLnN1cGVy Y2xhc3MuY29uZmlnQ2xvc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO30sX2RvQ2xv c2U6ZnVuY3Rpb24oSSl7Qi5wcmV2ZW50RGVmYXVsdChJKTt0aGlzLmNhbmNlbCgp O30sY29uZmlnQnV0dG9uczpmdW5jdGlvbihTLFIsTSl7dmFyIE49WUFIT08ud2lk Z2V0LkJ1dHRvbixVPVJbMF0sSz10aGlzLmlubmVyRWxlbWVudCxULFAsSixRLE8s SSxMO0QuY2FsbCh0aGlzKTt0aGlzLl9hQnV0dG9ucz1udWxsO2lmKEYuaXNBcnJh eShVKSl7Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ty5jbGFzc05h bWU9ImJ1dHRvbi1ncm91cCI7UT1VLmxlbmd0aDt0aGlzLl9hQnV0dG9ucz1bXTt0 aGlzLmRlZmF1bHRIdG1sQnV0dG9uPW51bGw7Zm9yKEw9MDtMPFE7TCsrKXtUPVVb TF07aWYoTil7Sj1uZXcgTih7bGFiZWw6VC50ZXh0fSk7Si5hcHBlbmRUbyhPKTtQ PUouZ2V0KCJlbGVtZW50Iik7aWYoVC5pc0RlZmF1bHQpe0ouYWRkQ2xhc3MoImRl ZmF1bHQiKTt0aGlzLmRlZmF1bHRIdG1sQnV0dG9uPVA7fWlmKEYuaXNGdW5jdGlv bihULmhhbmRsZXIpKXtKLnNldCgib25jbGljayIse2ZuOlQuaGFuZGxlcixvYmo6 dGhpcyxzY29wZTp0aGlzfSk7fWVsc2V7aWYoRi5pc09iamVjdChULmhhbmRsZXIp JiZGLmlzRnVuY3Rpb24oVC5oYW5kbGVyLmZuKSl7Si5zZXQoIm9uY2xpY2siLHtm bjpULmhhbmRsZXIuZm4sb2JqOigoIUYuaXNVbmRlZmluZWQoVC5oYW5kbGVyLm9i aikpP1QuaGFuZGxlci5vYmo6dGhpcyksc2NvcGU6KFQuaGFuZGxlci5zY29wZXx8 dGhpcyl9KTt9fXRoaXMuX2FCdXR0b25zW3RoaXMuX2FCdXR0b25zLmxlbmd0aF09 Sjt9ZWxzZXtQPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1Auc2V0 QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIik7aWYoVC5pc0RlZmF1bHQpe1AuY2xh c3NOYW1lPSJkZWZhdWx0Ijt0aGlzLmRlZmF1bHRIdG1sQnV0dG9uPVA7fVAuaW5u ZXJIVE1MPVQudGV4dDtpZihGLmlzRnVuY3Rpb24oVC5oYW5kbGVyKSl7Qi5vbihQ LCJjbGljayIsVC5oYW5kbGVyLHRoaXMsdHJ1ZSk7fWVsc2V7aWYoRi5pc09iamVj dChULmhhbmRsZXIpJiZGLmlzRnVuY3Rpb24oVC5oYW5kbGVyLmZuKSl7Qi5vbihQ LCJjbGljayIsVC5oYW5kbGVyLmZuLCgoIUYuaXNVbmRlZmluZWQoVC5oYW5kbGVy Lm9iaikpP1QuaGFuZGxlci5vYmo6dGhpcyksKFQuaGFuZGxlci5zY29wZXx8dGhp cykpO319Ty5hcHBlbmRDaGlsZChQKTt0aGlzLl9hQnV0dG9uc1t0aGlzLl9hQnV0 dG9ucy5sZW5ndGhdPVA7fVQuaHRtbEJ1dHRvbj1QO2lmKEw9PT0wKXt0aGlzLmZp cnN0QnV0dG9uPVA7fWlmKEw9PShRLTEpKXt0aGlzLmxhc3RCdXR0b249UDt9fXRo aXMuc2V0Rm9vdGVyKE8pO0k9dGhpcy5mb290ZXI7aWYoRS5pbkRvY3VtZW50KHRo aXMuZWxlbWVudCkmJiFFLmlzQW5jZXN0b3IoSyxJKSl7Sy5hcHBlbmRDaGlsZChJ KTt9dGhpcy5idXR0b25TcGFuPU87fWVsc2V7Tz10aGlzLmJ1dHRvblNwYW47ST10 aGlzLmZvb3RlcjtpZihPJiZJKXtJLnJlbW92ZUNoaWxkKE8pO3RoaXMuYnV0dG9u U3Bhbj1udWxsO3RoaXMuZmlyc3RCdXR0b249bnVsbDt0aGlzLmxhc3RCdXR0b249 bnVsbDt0aGlzLmRlZmF1bHRIdG1sQnV0dG9uPW51bGw7fX10aGlzLmNoYW5nZUNv bnRlbnRFdmVudC5maXJlKCk7fSxnZXRCdXR0b25zOmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuX2FCdXR0b25zfHxudWxsO30sZm9jdXNGaXJzdDpmdW5jdGlvbihLLEks TSl7dmFyIEo9dGhpcy5maXJzdEZvcm1FbGVtZW50O2lmKEkmJklbMV0pe0Iuc3Rv cEV2ZW50KElbMV0pO31pZihKKXt0cnl7Si5mb2N1cygpO31jYXRjaChMKXt9fWVs c2V7aWYodGhpcy5kZWZhdWx0SHRtbEJ1dHRvbil7dGhpcy5mb2N1c0RlZmF1bHRC dXR0b24oKTt9ZWxzZXt0aGlzLmZvY3VzRmlyc3RCdXR0b24oKTt9fX0sZm9jdXNM YXN0OmZ1bmN0aW9uKEssSSxNKXt2YXIgTj10aGlzLmNmZy5nZXRQcm9wZXJ0eSgi YnV0dG9ucyIpLEo9dGhpcy5sYXN0Rm9ybUVsZW1lbnQ7aWYoSSYmSVsxXSl7Qi5z dG9wRXZlbnQoSVsxXSk7fWlmKE4mJkYuaXNBcnJheShOKSl7dGhpcy5mb2N1c0xh c3RCdXR0b24oKTt9ZWxzZXtpZihKKXt0cnl7Si5mb2N1cygpO31jYXRjaChMKXt9 fX19LF9nZXRCdXR0b246ZnVuY3Rpb24oSil7dmFyIEk9WUFIT08ud2lkZ2V0LkJ1 dHRvbjtpZihJJiZKJiZKLm5vZGVOYW1lJiZKLmlkKXtKPUkuZ2V0QnV0dG9uKEou aWQpfHxKO31yZXR1cm4gSjt9LGZvY3VzRGVmYXVsdEJ1dHRvbjpmdW5jdGlvbigp e3ZhciBJPXRoaXMuX2dldEJ1dHRvbih0aGlzLmRlZmF1bHRIdG1sQnV0dG9uKTtp ZihJKXt0cnl7SS5mb2N1cygpO31jYXRjaChKKXt9fX0sYmx1ckJ1dHRvbnM6ZnVu Y3Rpb24oKXt2YXIgTj10aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYnV0dG9ucyIpLEss TSxKLEk7aWYoTiYmRi5pc0FycmF5KE4pKXtLPU4ubGVuZ3RoO2lmKEs+MCl7ST0o Sy0xKTtkb3tNPU5bSV07aWYoTSl7Sj10aGlzLl9nZXRCdXR0b24oTS5odG1sQnV0 dG9uKTtpZihKKXt0cnl7Si5ibHVyKCk7fWNhdGNoKEwpe319fX13aGlsZShJLS0p O319fSxmb2N1c0ZpcnN0QnV0dG9uOmZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5jZmcu Z2V0UHJvcGVydHkoImJ1dHRvbnMiKSxLLEk7aWYoTCYmRi5pc0FycmF5KEwpKXtL PUxbMF07aWYoSyl7ST10aGlzLl9nZXRCdXR0b24oSy5odG1sQnV0dG9uKTtpZihJ KXt0cnl7SS5mb2N1cygpO31jYXRjaChKKXt9fX19fSxmb2N1c0xhc3RCdXR0b246 ZnVuY3Rpb24oKXt2YXIgTT10aGlzLmNmZy5nZXRQcm9wZXJ0eSgiYnV0dG9ucyIp LEosTCxJO2lmKE0mJkYuaXNBcnJheShNKSl7Sj1NLmxlbmd0aDtpZihKPjApe0w9 TVsoSi0xKV07aWYoTCl7ST10aGlzLl9nZXRCdXR0b24oTC5odG1sQnV0dG9uKTtp ZihJKXt0cnl7SS5mb2N1cygpO31jYXRjaChLKXt9fX19fX0sY29uZmlnUG9zdE1l dGhvZDpmdW5jdGlvbihKLEksSyl7dGhpcy5yZWdpc3RlckZvcm0oKTt9LHZhbGlk YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSxzdWJtaXQ6ZnVuY3Rpb24oKXtp Zih0aGlzLnZhbGlkYXRlKCkpe3RoaXMuYmVmb3JlU3VibWl0RXZlbnQuZmlyZSgp O3RoaXMuZG9TdWJtaXQoKTt0aGlzLnN1Ym1pdEV2ZW50LmZpcmUoKTtpZih0aGlz LmNmZy5nZXRQcm9wZXJ0eSgiaGlkZWFmdGVyc3VibWl0Iikpe3RoaXMuaGlkZSgp O31yZXR1cm4gdHJ1ZTt9ZWxzZXtyZXR1cm4gZmFsc2U7fX0sY2FuY2VsOmZ1bmN0 aW9uKCl7dGhpcy5jYW5jZWxFdmVudC5maXJlKCk7dGhpcy5oaWRlKCk7fSxnZXRE YXRhOmZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5mb3JtLEssUixVLE0sUyxQLE8sSixW LEwsVyxaLEksTixhLFgsVDtmdW5jdGlvbiBRKGMpe3ZhciBiPWMudGFnTmFtZS50 b1VwcGVyQ2FzZSgpO3JldHVybigoYj09IklOUFVUInx8Yj09IlRFWFRBUkVBInx8 Yj09IlNFTEVDVCIpJiZjLm5hbWU9PU0pO31pZihZKXtLPVkuZWxlbWVudHM7Uj1L Lmxlbmd0aDtVPXt9O2ZvcihYPTA7WDxSO1grKyl7TT1LW1hdLm5hbWU7Uz1FLmdl dEVsZW1lbnRzQnkoUSwiKiIsWSk7UD1TLmxlbmd0aDtpZihQPjApe2lmKFA9PTEp e1M9U1swXTtPPVMudHlwZTtKPVMudGFnTmFtZS50b1VwcGVyQ2FzZSgpO3N3aXRj aChKKXtjYXNlIklOUFVUIjppZihPPT0iY2hlY2tib3giKXtVW01dPVMuY2hlY2tl ZDt9ZWxzZXtpZihPIT0icmFkaW8iKXtVW01dPVMudmFsdWU7fX1icmVhaztjYXNl IlRFWFRBUkVBIjpVW01dPVMudmFsdWU7YnJlYWs7Y2FzZSJTRUxFQ1QiOlY9Uy5v cHRpb25zO0w9Vi5sZW5ndGg7Vz1bXTtmb3IoVD0wO1Q8TDtUKyspe1o9VltUXTtp ZihaLnNlbGVjdGVkKXtJPVoudmFsdWU7aWYoIUl8fEk9PT0iIil7ST1aLnRleHQ7 fVdbVy5sZW5ndGhdPUk7fX1VW01dPVc7YnJlYWs7fX1lbHNle089U1swXS50eXBl O3N3aXRjaChPKXtjYXNlInJhZGlvIjpmb3IoVD0wO1Q8UDtUKyspe049U1tUXTtp ZihOLmNoZWNrZWQpe1VbTV09Ti52YWx1ZTticmVhazt9fWJyZWFrO2Nhc2UiY2hl Y2tib3giOlc9W107Zm9yKFQ9MDtUPFA7VCsrKXthPVNbVF07aWYoYS5jaGVja2Vk KXtXW1cubGVuZ3RoXT1hLnZhbHVlO319VVtNXT1XO2JyZWFrO319fX19cmV0dXJu IFU7fSxkZXN0cm95OmZ1bmN0aW9uKCl7RC5jYWxsKHRoaXMpO3RoaXMuX2FCdXR0 b25zPW51bGw7dmFyIEk9dGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l KCJmb3JtIiksSjtpZihJLmxlbmd0aD4wKXtKPUlbMF07aWYoSil7Qi5wdXJnZUVs ZW1lbnQoSik7aWYoSi5wYXJlbnROb2RlKXtKLnBhcmVudE5vZGUucmVtb3ZlQ2hp bGQoSik7fXRoaXMuZm9ybT1udWxsO319QS5zdXBlcmNsYXNzLmRlc3Ryb3kuY2Fs bCh0aGlzKTt9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkRpYWxvZyAiK3Ro aXMuaWQ7fX0pO30oKSk7KGZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LlNpbXBsZURp YWxvZz1mdW5jdGlvbihFLEQpe1lBSE9PLndpZGdldC5TaW1wbGVEaWFsb2cuc3Vw ZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsRSxEKTt9O3ZhciBDPVlBSE9P LnV0aWwuRG9tLEI9WUFIT08ud2lkZ2V0LlNpbXBsZURpYWxvZyxBPXsiSUNPTiI6 e2tleToiaWNvbiIsdmFsdWU6Im5vbmUiLHN1cHByZXNzRXZlbnQ6dHJ1ZX0sIlRF WFQiOntrZXk6InRleHQiLHZhbHVlOiIiLHN1cHByZXNzRXZlbnQ6dHJ1ZSxzdXBl cmNlZGVzOlsiaWNvbiJdfX07Qi5JQ09OX0JMT0NLPSJibGNraWNvbiI7Qi5JQ09O X0FMQVJNPSJhbHJ0aWNvbiI7Qi5JQ09OX0hFTFA9ImhscGljb24iO0IuSUNPTl9J TkZPPSJpbmZvaWNvbiI7Qi5JQ09OX1dBUk49Indhcm5pY29uIjtCLklDT05fVElQ PSJ0aXBpY29uIjtCLklDT05fQ1NTX0NMQVNTTkFNRT0ieXVpLWljb24iO0IuQ1NT X1NJTVBMRURJQUxPRz0ieXVpLXNpbXBsZS1kaWFsb2ciO1lBSE9PLmV4dGVuZChC LFlBSE9PLndpZGdldC5EaWFsb2cse2luaXREZWZhdWx0Q29uZmlnOmZ1bmN0aW9u KCl7Qi5zdXBlcmNsYXNzLmluaXREZWZhdWx0Q29uZmlnLmNhbGwodGhpcyk7dGhp cy5jZmcuYWRkUHJvcGVydHkoQS5JQ09OLmtleSx7aGFuZGxlcjp0aGlzLmNvbmZp Z0ljb24sdmFsdWU6QS5JQ09OLnZhbHVlLHN1cHByZXNzRXZlbnQ6QS5JQ09OLnN1 cHByZXNzRXZlbnR9KTt0aGlzLmNmZy5hZGRQcm9wZXJ0eShBLlRFWFQua2V5LHto YW5kbGVyOnRoaXMuY29uZmlnVGV4dCx2YWx1ZTpBLlRFWFQudmFsdWUsc3VwcHJl c3NFdmVudDpBLlRFWFQuc3VwcHJlc3NFdmVudCxzdXBlcmNlZGVzOkEuVEVYVC5z dXBlcmNlZGVzfSk7fSxpbml0OmZ1bmN0aW9uKEUsRCl7Qi5zdXBlcmNsYXNzLmlu aXQuY2FsbCh0aGlzLEUpO3RoaXMuYmVmb3JlSW5pdEV2ZW50LmZpcmUoQik7Qy5h ZGRDbGFzcyh0aGlzLmVsZW1lbnQsQi5DU1NfU0lNUExFRElBTE9HKTt0aGlzLmNm Zy5xdWV1ZVByb3BlcnR5KCJwb3N0bWV0aG9kIiwibWFudWFsIik7aWYoRCl7dGhp cy5jZmcuYXBwbHlDb25maWcoRCx0cnVlKTt9dGhpcy5iZWZvcmVSZW5kZXJFdmVu dC5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZighdGhpcy5ib2R5KXt0aGlzLnNldEJv ZHkoIiIpO319LHRoaXMsdHJ1ZSk7dGhpcy5pbml0RXZlbnQuZmlyZShCKTt9LHJl Z2lzdGVyRm9ybTpmdW5jdGlvbigpe0Iuc3VwZXJjbGFzcy5yZWdpc3RlckZvcm0u Y2FsbCh0aGlzKTt0aGlzLmZvcm0uaW5uZXJIVE1MKz0nPGlucHV0IHR5cGU9Imhp ZGRlbiIgbmFtZT0iJyt0aGlzLmlkKyciIHZhbHVlPSIiLz4nO30sY29uZmlnSWNv bjpmdW5jdGlvbihGLEUsSil7dmFyIEs9RVswXSxEPXRoaXMuYm9keSxJPUIuSUNP Tl9DU1NfQ0xBU1NOQU1FLEgsRztpZihLJiZLIT0ibm9uZSIpe0g9Qy5nZXRFbGVt ZW50c0J5Q2xhc3NOYW1lKEksIioiLEQpO2lmKEgpe0c9SC5wYXJlbnROb2RlO2lm KEcpe0cucmVtb3ZlQ2hpbGQoSCk7SD1udWxsO319aWYoSy5pbmRleE9mKCIuIik9 PS0xKXtIPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtILmNsYXNzTmFt ZT0oSSsiICIrSyk7SC5pbm5lckhUTUw9IiYjMTYwOyI7fWVsc2V7SD1kb2N1bWVu dC5jcmVhdGVFbGVtZW50KCJpbWciKTtILnNyYz0odGhpcy5pbWFnZVJvb3QrSyk7 SC5jbGFzc05hbWU9STt9aWYoSCl7RC5pbnNlcnRCZWZvcmUoSCxELmZpcnN0Q2hp bGQpO319fSxjb25maWdUZXh0OmZ1bmN0aW9uKEUsRCxGKXt2YXIgRz1EWzBdO2lm KEcpe3RoaXMuc2V0Qm9keShHKTt0aGlzLmNmZy5yZWZpcmVFdmVudCgiaWNvbiIp O319LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlNpbXBsZURpYWxvZyAiK3Ro aXMuaWQ7fX0pO30oKSk7KGZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LkNvbnRhaW5l ckVmZmVjdD1mdW5jdGlvbihFLEgsRyxELEYpe2lmKCFGKXtGPVlBSE9PLnV0aWwu QW5pbTt9dGhpcy5vdmVybGF5PUU7dGhpcy5hdHRySW49SDt0aGlzLmF0dHJPdXQ9 Rzt0aGlzLnRhcmdldEVsZW1lbnQ9RHx8RS5lbGVtZW50O3RoaXMuYW5pbUNsYXNz PUY7fTt2YXIgQj1ZQUhPTy51dGlsLkRvbSxDPVlBSE9PLnV0aWwuQ3VzdG9tRXZl bnQsQT1ZQUhPTy53aWRnZXQuQ29udGFpbmVyRWZmZWN0O0EuRkFERT1mdW5jdGlv bihELEYpe3ZhciBHPVlBSE9PLnV0aWwuRWFzaW5nLEk9e2F0dHJpYnV0ZXM6e29w YWNpdHk6e2Zyb206MCx0bzoxfX0sZHVyYXRpb246RixtZXRob2Q6Ry5lYXNlSW59 LEU9e2F0dHJpYnV0ZXM6e29wYWNpdHk6e3RvOjB9fSxkdXJhdGlvbjpGLG1ldGhv ZDpHLmVhc2VPdXR9LEg9bmV3IEEoRCxJLEUsRC5lbGVtZW50KTtILmhhbmRsZVVu ZGVybGF5U3RhcnQ9ZnVuY3Rpb24oKXt2YXIgSz10aGlzLm92ZXJsYXkudW5kZXJs YXk7aWYoSyYmWUFIT08uZW52LnVhLmllKXt2YXIgSj0oSy5maWx0ZXJzJiZLLmZp bHRlcnMubGVuZ3RoPjApO2lmKEope0IuYWRkQ2xhc3MoRC5lbGVtZW50LCJ5dWkt ZWZmZWN0LWZhZGUiKTt9fX07SC5oYW5kbGVVbmRlcmxheUNvbXBsZXRlPWZ1bmN0 aW9uKCl7dmFyIEo9dGhpcy5vdmVybGF5LnVuZGVybGF5O2lmKEomJllBSE9PLmVu di51YS5pZSl7Qi5yZW1vdmVDbGFzcyhELmVsZW1lbnQsInl1aS1lZmZlY3QtZmFk ZSIpO319O0guaGFuZGxlU3RhcnRBbmltYXRlSW49ZnVuY3Rpb24oSyxKLEwpe0Iu YWRkQ2xhc3MoTC5vdmVybGF5LmVsZW1lbnQsImhpZGUtc2VsZWN0Iik7aWYoIUwu b3ZlcmxheS51bmRlcmxheSl7TC5vdmVybGF5LmNmZy5yZWZpcmVFdmVudCgidW5k ZXJsYXkiKTt9TC5oYW5kbGVVbmRlcmxheVN0YXJ0KCk7TC5vdmVybGF5Ll9zZXRE b21WaXNpYmlsaXR5KHRydWUpO0Iuc2V0U3R5bGUoTC5vdmVybGF5LmVsZW1lbnQs Im9wYWNpdHkiLDApO307SC5oYW5kbGVDb21wbGV0ZUFuaW1hdGVJbj1mdW5jdGlv bihLLEosTCl7Qi5yZW1vdmVDbGFzcyhMLm92ZXJsYXkuZWxlbWVudCwiaGlkZS1z ZWxlY3QiKTtpZihMLm92ZXJsYXkuZWxlbWVudC5zdHlsZS5maWx0ZXIpe0wub3Zl cmxheS5lbGVtZW50LnN0eWxlLmZpbHRlcj1udWxsO31MLmhhbmRsZVVuZGVybGF5 Q29tcGxldGUoKTtMLm92ZXJsYXkuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKTtM LmFuaW1hdGVJbkNvbXBsZXRlRXZlbnQuZmlyZSgpO307SC5oYW5kbGVTdGFydEFu aW1hdGVPdXQ9ZnVuY3Rpb24oSyxKLEwpe0IuYWRkQ2xhc3MoTC5vdmVybGF5LmVs ZW1lbnQsImhpZGUtc2VsZWN0Iik7TC5oYW5kbGVVbmRlcmxheVN0YXJ0KCk7fTtI LmhhbmRsZUNvbXBsZXRlQW5pbWF0ZU91dD1mdW5jdGlvbihLLEosTCl7Qi5yZW1v dmVDbGFzcyhMLm92ZXJsYXkuZWxlbWVudCwiaGlkZS1zZWxlY3QiKTtpZihMLm92 ZXJsYXkuZWxlbWVudC5zdHlsZS5maWx0ZXIpe0wub3ZlcmxheS5lbGVtZW50LnN0 eWxlLmZpbHRlcj1udWxsO31MLm92ZXJsYXkuX3NldERvbVZpc2liaWxpdHkoZmFs c2UpO0Iuc2V0U3R5bGUoTC5vdmVybGF5LmVsZW1lbnQsIm9wYWNpdHkiLDEpO0wu aGFuZGxlVW5kZXJsYXlDb21wbGV0ZSgpO0wub3ZlcmxheS5jZmcucmVmaXJlRXZl bnQoImlmcmFtZSIpO0wuYW5pbWF0ZU91dENvbXBsZXRlRXZlbnQuZmlyZSgpO307 SC5pbml0KCk7cmV0dXJuIEg7fTtBLlNMSURFPWZ1bmN0aW9uKEYsRCl7dmFyIEk9 WUFIT08udXRpbC5FYXNpbmcsTD1GLmNmZy5nZXRQcm9wZXJ0eSgieCIpfHxCLmdl dFgoRi5lbGVtZW50KSxLPUYuY2ZnLmdldFByb3BlcnR5KCJ5Iil8fEIuZ2V0WShG LmVsZW1lbnQpLE09Qi5nZXRDbGllbnRXaWR0aCgpLEg9Ri5lbGVtZW50Lm9mZnNl dFdpZHRoLEo9e2F0dHJpYnV0ZXM6e3BvaW50czp7dG86W0wsS119fSxkdXJhdGlv bjpELG1ldGhvZDpJLmVhc2VJbn0sRT17YXR0cmlidXRlczp7cG9pbnRzOnt0bzpb KE0rMjUpLEtdfX0sZHVyYXRpb246RCxtZXRob2Q6SS5lYXNlT3V0fSxHPW5ldyBB KEYsSixFLEYuZWxlbWVudCxZQUhPTy51dGlsLk1vdGlvbik7Ry5oYW5kbGVTdGFy dEFuaW1hdGVJbj1mdW5jdGlvbihPLE4sUCl7UC5vdmVybGF5LmVsZW1lbnQuc3R5 bGUubGVmdD0oKC0yNSktSCkrInB4IjtQLm92ZXJsYXkuZWxlbWVudC5zdHlsZS50 b3A9SysicHgiO307Ry5oYW5kbGVUd2VlbkFuaW1hdGVJbj1mdW5jdGlvbihRLFAs Uil7dmFyIFM9Qi5nZXRYWShSLm92ZXJsYXkuZWxlbWVudCksTz1TWzBdLE49U1sx XTtpZihCLmdldFN0eWxlKFIub3ZlcmxheS5lbGVtZW50LCJ2aXNpYmlsaXR5Iik9 PSJoaWRkZW4iJiZPPEwpe1Iub3ZlcmxheS5fc2V0RG9tVmlzaWJpbGl0eSh0cnVl KTt9Ui5vdmVybGF5LmNmZy5zZXRQcm9wZXJ0eSgieHkiLFtPLE5dLHRydWUpO1Iu b3ZlcmxheS5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIpO307Ry5oYW5kbGVDb21w bGV0ZUFuaW1hdGVJbj1mdW5jdGlvbihPLE4sUCl7UC5vdmVybGF5LmNmZy5zZXRQ cm9wZXJ0eSgieHkiLFtMLEtdLHRydWUpO1Auc3RhcnRYPUw7UC5zdGFydFk9SztQ Lm92ZXJsYXkuY2ZnLnJlZmlyZUV2ZW50KCJpZnJhbWUiKTtQLmFuaW1hdGVJbkNv bXBsZXRlRXZlbnQuZmlyZSgpO307Ry5oYW5kbGVTdGFydEFuaW1hdGVPdXQ9ZnVu Y3Rpb24oTyxOLFIpe3ZhciBQPUIuZ2V0Vmlld3BvcnRXaWR0aCgpLFM9Qi5nZXRY WShSLm92ZXJsYXkuZWxlbWVudCksUT1TWzFdO1IuYW5pbU91dC5hdHRyaWJ1dGVz LnBvaW50cy50bz1bKFArMjUpLFFdO307Ry5oYW5kbGVUd2VlbkFuaW1hdGVPdXQ9 ZnVuY3Rpb24oUCxPLFEpe3ZhciBTPUIuZ2V0WFkoUS5vdmVybGF5LmVsZW1lbnQp LE49U1swXSxSPVNbMV07US5vdmVybGF5LmNmZy5zZXRQcm9wZXJ0eSgieHkiLFtO LFJdLHRydWUpO1Eub3ZlcmxheS5jZmcucmVmaXJlRXZlbnQoImlmcmFtZSIpO307 Ry5oYW5kbGVDb21wbGV0ZUFuaW1hdGVPdXQ9ZnVuY3Rpb24oTyxOLFApe1Aub3Zl cmxheS5fc2V0RG9tVmlzaWJpbGl0eShmYWxzZSk7UC5vdmVybGF5LmNmZy5zZXRQ cm9wZXJ0eSgieHkiLFtMLEtdKTtQLmFuaW1hdGVPdXRDb21wbGV0ZUV2ZW50LmZp cmUoKTt9O0cuaW5pdCgpO3JldHVybiBHO307QS5wcm90b3R5cGU9e2luaXQ6ZnVu Y3Rpb24oKXt0aGlzLmJlZm9yZUFuaW1hdGVJbkV2ZW50PXRoaXMuY3JlYXRlRXZl bnQoImJlZm9yZUFuaW1hdGVJbiIpO3RoaXMuYmVmb3JlQW5pbWF0ZUluRXZlbnQu c2lnbmF0dXJlPUMuTElTVDt0aGlzLmJlZm9yZUFuaW1hdGVPdXRFdmVudD10aGlz LmNyZWF0ZUV2ZW50KCJiZWZvcmVBbmltYXRlT3V0Iik7dGhpcy5iZWZvcmVBbmlt YXRlT3V0RXZlbnQuc2lnbmF0dXJlPUMuTElTVDt0aGlzLmFuaW1hdGVJbkNvbXBs ZXRlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudCgiYW5pbWF0ZUluQ29tcGxldGUiKTt0 aGlzLmFuaW1hdGVJbkNvbXBsZXRlRXZlbnQuc2lnbmF0dXJlPUMuTElTVDt0aGlz LmFuaW1hdGVPdXRDb21wbGV0ZUV2ZW50PXRoaXMuY3JlYXRlRXZlbnQoImFuaW1h dGVPdXRDb21wbGV0ZSIpO3RoaXMuYW5pbWF0ZU91dENvbXBsZXRlRXZlbnQuc2ln bmF0dXJlPUMuTElTVDt0aGlzLmFuaW1Jbj1uZXcgdGhpcy5hbmltQ2xhc3ModGhp cy50YXJnZXRFbGVtZW50LHRoaXMuYXR0ckluLmF0dHJpYnV0ZXMsdGhpcy5hdHRy SW4uZHVyYXRpb24sdGhpcy5hdHRySW4ubWV0aG9kKTt0aGlzLmFuaW1Jbi5vblN0 YXJ0LnN1YnNjcmliZSh0aGlzLmhhbmRsZVN0YXJ0QW5pbWF0ZUluLHRoaXMpO3Ro aXMuYW5pbUluLm9uVHdlZW4uc3Vic2NyaWJlKHRoaXMuaGFuZGxlVHdlZW5Bbmlt YXRlSW4sdGhpcyk7dGhpcy5hbmltSW4ub25Db21wbGV0ZS5zdWJzY3JpYmUodGhp cy5oYW5kbGVDb21wbGV0ZUFuaW1hdGVJbix0aGlzKTt0aGlzLmFuaW1PdXQ9bmV3 IHRoaXMuYW5pbUNsYXNzKHRoaXMudGFyZ2V0RWxlbWVudCx0aGlzLmF0dHJPdXQu YXR0cmlidXRlcyx0aGlzLmF0dHJPdXQuZHVyYXRpb24sdGhpcy5hdHRyT3V0Lm1l dGhvZCk7dGhpcy5hbmltT3V0Lm9uU3RhcnQuc3Vic2NyaWJlKHRoaXMuaGFuZGxl U3RhcnRBbmltYXRlT3V0LHRoaXMpO3RoaXMuYW5pbU91dC5vblR3ZWVuLnN1YnNj cmliZSh0aGlzLmhhbmRsZVR3ZWVuQW5pbWF0ZU91dCx0aGlzKTt0aGlzLmFuaW1P dXQub25Db21wbGV0ZS5zdWJzY3JpYmUodGhpcy5oYW5kbGVDb21wbGV0ZUFuaW1h dGVPdXQsdGhpcyk7fSxhbmltYXRlSW46ZnVuY3Rpb24oKXt0aGlzLmJlZm9yZUFu aW1hdGVJbkV2ZW50LmZpcmUoKTt0aGlzLmFuaW1Jbi5hbmltYXRlKCk7fSxhbmlt YXRlT3V0OmZ1bmN0aW9uKCl7dGhpcy5iZWZvcmVBbmltYXRlT3V0RXZlbnQuZmly ZSgpO3RoaXMuYW5pbU91dC5hbmltYXRlKCk7fSxoYW5kbGVTdGFydEFuaW1hdGVJ bjpmdW5jdGlvbihFLEQsRil7fSxoYW5kbGVUd2VlbkFuaW1hdGVJbjpmdW5jdGlv bihFLEQsRil7fSxoYW5kbGVDb21wbGV0ZUFuaW1hdGVJbjpmdW5jdGlvbihFLEQs Ril7fSxoYW5kbGVTdGFydEFuaW1hdGVPdXQ6ZnVuY3Rpb24oRSxELEYpe30saGFu ZGxlVHdlZW5BbmltYXRlT3V0OmZ1bmN0aW9uKEUsRCxGKXt9LGhhbmRsZUNvbXBs ZXRlQW5pbWF0ZU91dDpmdW5jdGlvbihFLEQsRil7fSx0b1N0cmluZzpmdW5jdGlv bigpe3ZhciBEPSJDb250YWluZXJFZmZlY3QiO2lmKHRoaXMub3ZlcmxheSl7RCs9 IiBbIit0aGlzLm92ZXJsYXkudG9TdHJpbmcoKSsiXSI7fXJldHVybiBEO319O1lB SE9PLmxhbmcuYXVnbWVudFByb3RvKEEsWUFIT08udXRpbC5FdmVudFByb3ZpZGVy KTt9KSgpO1lBSE9PLnJlZ2lzdGVyKCJjb250YWluZXIiLFlBSE9PLndpZGdldC5N b2R1bGUse3ZlcnNpb246IjIuNy4wIixidWlsZDoiMTc5OSJ9KTsoZnVuY3Rpb24o KXtZQUhPTy51dGlsLkNvbmZpZz1mdW5jdGlvbihEKXtpZihEKXt0aGlzLmluaXQo RCk7fX07dmFyIEI9WUFIT08ubGFuZyxDPVlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQs QT1ZQUhPTy51dGlsLkNvbmZpZztBLkNPTkZJR19DSEFOR0VEX0VWRU5UPSJjb25m aWdDaGFuZ2VkIjtBLkJPT0xFQU5fVFlQRT0iYm9vbGVhbiI7QS5wcm90b3R5cGU9 e293bmVyOm51bGwscXVldWVJblByb2dyZXNzOmZhbHNlLGNvbmZpZzpudWxsLGlu aXRpYWxDb25maWc6bnVsbCxldmVudFF1ZXVlOm51bGwsY29uZmlnQ2hhbmdlZEV2 ZW50Om51bGwsaW5pdDpmdW5jdGlvbihEKXt0aGlzLm93bmVyPUQ7dGhpcy5jb25m aWdDaGFuZ2VkRXZlbnQ9dGhpcy5jcmVhdGVFdmVudChBLkNPTkZJR19DSEFOR0VE X0VWRU5UKTt0aGlzLmNvbmZpZ0NoYW5nZWRFdmVudC5zaWduYXR1cmU9Qy5MSVNU O3RoaXMucXVldWVJblByb2dyZXNzPWZhbHNlO3RoaXMuY29uZmlnPXt9O3RoaXMu aW5pdGlhbENvbmZpZz17fTt0aGlzLmV2ZW50UXVldWU9W107fSxjaGVja0Jvb2xl YW46ZnVuY3Rpb24oRCl7cmV0dXJuKHR5cGVvZiBEPT1BLkJPT0xFQU5fVFlQRSk7 fSxjaGVja051bWJlcjpmdW5jdGlvbihEKXtyZXR1cm4oIWlzTmFOKEQpKTt9LGZp cmVFdmVudDpmdW5jdGlvbihELEYpe3ZhciBFPXRoaXMuY29uZmlnW0RdO2lmKEUm JkUuZXZlbnQpe0UuZXZlbnQuZmlyZShGKTt9fSxhZGRQcm9wZXJ0eTpmdW5jdGlv bihFLEQpe0U9RS50b0xvd2VyQ2FzZSgpO3RoaXMuY29uZmlnW0VdPUQ7RC5ldmVu dD10aGlzLmNyZWF0ZUV2ZW50KEUse3Njb3BlOnRoaXMub3duZXJ9KTtELmV2ZW50 LnNpZ25hdHVyZT1DLkxJU1Q7RC5rZXk9RTtpZihELmhhbmRsZXIpe0QuZXZlbnQu c3Vic2NyaWJlKEQuaGFuZGxlcix0aGlzLm93bmVyKTt9dGhpcy5zZXRQcm9wZXJ0 eShFLEQudmFsdWUsdHJ1ZSk7aWYoIUQuc3VwcHJlc3NFdmVudCl7dGhpcy5xdWV1 ZVByb3BlcnR5KEUsRC52YWx1ZSk7fX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7dmFy IEQ9e30sRj10aGlzLmNvbmZpZyxHLEU7Zm9yKEcgaW4gRil7aWYoQi5oYXNPd25Q cm9wZXJ0eShGLEcpKXtFPUZbR107aWYoRSYmRS5ldmVudCl7RFtHXT1FLnZhbHVl O319fXJldHVybiBEO30sZ2V0UHJvcGVydHk6ZnVuY3Rpb24oRCl7dmFyIEU9dGhp cy5jb25maWdbRC50b0xvd2VyQ2FzZSgpXTtpZihFJiZFLmV2ZW50KXtyZXR1cm4g RS52YWx1ZTt9ZWxzZXtyZXR1cm4gdW5kZWZpbmVkO319LHJlc2V0UHJvcGVydHk6 ZnVuY3Rpb24oRCl7RD1ELnRvTG93ZXJDYXNlKCk7dmFyIEU9dGhpcy5jb25maWdb RF07aWYoRSYmRS5ldmVudCl7aWYodGhpcy5pbml0aWFsQ29uZmlnW0RdJiYhQi5p c1VuZGVmaW5lZCh0aGlzLmluaXRpYWxDb25maWdbRF0pKXt0aGlzLnNldFByb3Bl cnR5KEQsdGhpcy5pbml0aWFsQ29uZmlnW0RdKTtyZXR1cm4gdHJ1ZTt9fWVsc2V7 cmV0dXJuIGZhbHNlO319LHNldFByb3BlcnR5OmZ1bmN0aW9uKEUsRyxEKXt2YXIg RjtFPUUudG9Mb3dlckNhc2UoKTtpZih0aGlzLnF1ZXVlSW5Qcm9ncmVzcyYmIUQp e3RoaXMucXVldWVQcm9wZXJ0eShFLEcpO3JldHVybiB0cnVlO31lbHNle0Y9dGhp cy5jb25maWdbRV07aWYoRiYmRi5ldmVudCl7aWYoRi52YWxpZGF0b3ImJiFGLnZh bGlkYXRvcihHKSl7cmV0dXJuIGZhbHNlO31lbHNle0YudmFsdWU9RztpZighRCl7 dGhpcy5maXJlRXZlbnQoRSxHKTt0aGlzLmNvbmZpZ0NoYW5nZWRFdmVudC5maXJl KFtFLEddKTt9cmV0dXJuIHRydWU7fX1lbHNle3JldHVybiBmYWxzZTt9fX0scXVl dWVQcm9wZXJ0eTpmdW5jdGlvbihTLFApe1M9Uy50b0xvd2VyQ2FzZSgpO3ZhciBS PXRoaXMuY29uZmlnW1NdLEs9ZmFsc2UsSixHLEgsSSxPLFEsRixNLE4sRCxMLFQs RTtpZihSJiZSLmV2ZW50KXtpZighQi5pc1VuZGVmaW5lZChQKSYmUi52YWxpZGF0 b3ImJiFSLnZhbGlkYXRvcihQKSl7cmV0dXJuIGZhbHNlO31lbHNle2lmKCFCLmlz VW5kZWZpbmVkKFApKXtSLnZhbHVlPVA7fWVsc2V7UD1SLnZhbHVlO31LPWZhbHNl O0o9dGhpcy5ldmVudFF1ZXVlLmxlbmd0aDtmb3IoTD0wO0w8SjtMKyspe0c9dGhp cy5ldmVudFF1ZXVlW0xdO2lmKEcpe0g9R1swXTtJPUdbMV07aWYoSD09Uyl7dGhp cy5ldmVudFF1ZXVlW0xdPW51bGw7dGhpcy5ldmVudFF1ZXVlLnB1c2goW1MsKCFC LmlzVW5kZWZpbmVkKFApP1A6SSldKTtLPXRydWU7YnJlYWs7fX19aWYoIUsmJiFC LmlzVW5kZWZpbmVkKFApKXt0aGlzLmV2ZW50UXVldWUucHVzaChbUyxQXSk7fX1p ZihSLnN1cGVyY2VkZXMpe089Ui5zdXBlcmNlZGVzLmxlbmd0aDtmb3IoVD0wO1Q8 TztUKyspe1E9Ui5zdXBlcmNlZGVzW1RdO0Y9dGhpcy5ldmVudFF1ZXVlLmxlbmd0 aDtmb3IoRT0wO0U8RjtFKyspe009dGhpcy5ldmVudFF1ZXVlW0VdO2lmKE0pe049 TVswXTtEPU1bMV07aWYoTj09US50b0xvd2VyQ2FzZSgpKXt0aGlzLmV2ZW50UXVl dWUucHVzaChbTixEXSk7dGhpcy5ldmVudFF1ZXVlW0VdPW51bGw7YnJlYWs7fX19 fX1yZXR1cm4gdHJ1ZTt9ZWxzZXtyZXR1cm4gZmFsc2U7fX0scmVmaXJlRXZlbnQ6 ZnVuY3Rpb24oRCl7RD1ELnRvTG93ZXJDYXNlKCk7dmFyIEU9dGhpcy5jb25maWdb RF07aWYoRSYmRS5ldmVudCYmIUIuaXNVbmRlZmluZWQoRS52YWx1ZSkpe2lmKHRo aXMucXVldWVJblByb2dyZXNzKXt0aGlzLnF1ZXVlUHJvcGVydHkoRCk7fWVsc2V7 dGhpcy5maXJlRXZlbnQoRCxFLnZhbHVlKTt9fX0sYXBwbHlDb25maWc6ZnVuY3Rp b24oRCxHKXt2YXIgRixFO2lmKEcpe0U9e307Zm9yKEYgaW4gRCl7aWYoQi5oYXNP d25Qcm9wZXJ0eShELEYpKXtFW0YudG9Mb3dlckNhc2UoKV09RFtGXTt9fXRoaXMu aW5pdGlhbENvbmZpZz1FO31mb3IoRiBpbiBEKXtpZihCLmhhc093blByb3BlcnR5 KEQsRikpe3RoaXMucXVldWVQcm9wZXJ0eShGLERbRl0pO319fSxyZWZyZXNoOmZ1 bmN0aW9uKCl7dmFyIEQ7Zm9yKEQgaW4gdGhpcy5jb25maWcpe2lmKEIuaGFzT3du UHJvcGVydHkodGhpcy5jb25maWcsRCkpe3RoaXMucmVmaXJlRXZlbnQoRCk7fX19 LGZpcmVRdWV1ZTpmdW5jdGlvbigpe3ZhciBFLEgsRCxHLEY7dGhpcy5xdWV1ZUlu UHJvZ3Jlc3M9dHJ1ZTtmb3IoRT0wO0U8dGhpcy5ldmVudFF1ZXVlLmxlbmd0aDtF Kyspe0g9dGhpcy5ldmVudFF1ZXVlW0VdO2lmKEgpe0Q9SFswXTtHPUhbMV07Rj10 aGlzLmNvbmZpZ1tEXTtGLnZhbHVlPUc7dGhpcy5ldmVudFF1ZXVlW0VdPW51bGw7 dGhpcy5maXJlRXZlbnQoRCxHKTt9fXRoaXMucXVldWVJblByb2dyZXNzPWZhbHNl O3RoaXMuZXZlbnRRdWV1ZT1bXTt9LHN1YnNjcmliZVRvQ29uZmlnRXZlbnQ6ZnVu Y3Rpb24oRSxGLEgsRCl7dmFyIEc9dGhpcy5jb25maWdbRS50b0xvd2VyQ2FzZSgp XTtpZihHJiZHLmV2ZW50KXtpZighQS5hbHJlYWR5U3Vic2NyaWJlZChHLmV2ZW50 LEYsSCkpe0cuZXZlbnQuc3Vic2NyaWJlKEYsSCxEKTt9cmV0dXJuIHRydWU7fWVs c2V7cmV0dXJuIGZhbHNlO319LHVuc3Vic2NyaWJlRnJvbUNvbmZpZ0V2ZW50OmZ1 bmN0aW9uKEQsRSxHKXt2YXIgRj10aGlzLmNvbmZpZ1tELnRvTG93ZXJDYXNlKCld O2lmKEYmJkYuZXZlbnQpe3JldHVybiBGLmV2ZW50LnVuc3Vic2NyaWJlKEUsRyk7 fWVsc2V7cmV0dXJuIGZhbHNlO319LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIEQ9 IkNvbmZpZyI7aWYodGhpcy5vd25lcil7RCs9IiBbIit0aGlzLm93bmVyLnRvU3Ry aW5nKCkrIl0iO31yZXR1cm4gRDt9LG91dHB1dEV2ZW50UXVldWU6ZnVuY3Rpb24o KXt2YXIgRD0iIixHLEUsRj10aGlzLmV2ZW50UXVldWUubGVuZ3RoO2ZvcihFPTA7 RTxGO0UrKyl7Rz10aGlzLmV2ZW50UXVldWVbRV07aWYoRyl7RCs9R1swXSsiPSIr R1sxXSsiLCAiO319cmV0dXJuIEQ7fSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIEU9 dGhpcy5jb25maWcsRCxGO2ZvcihEIGluIEUpe2lmKEIuaGFzT3duUHJvcGVydHko RSxEKSl7Rj1FW0RdO0YuZXZlbnQudW5zdWJzY3JpYmVBbGwoKTtGLmV2ZW50PW51 bGw7fX10aGlzLmNvbmZpZ0NoYW5nZWRFdmVudC51bnN1YnNjcmliZUFsbCgpO3Ro aXMuY29uZmlnQ2hhbmdlZEV2ZW50PW51bGw7dGhpcy5vd25lcj1udWxsO3RoaXMu Y29uZmlnPW51bGw7dGhpcy5pbml0aWFsQ29uZmlnPW51bGw7dGhpcy5ldmVudFF1 ZXVlPW51bGw7fX07QS5hbHJlYWR5U3Vic2NyaWJlZD1mdW5jdGlvbihFLEgsSSl7 dmFyIEY9RS5zdWJzY3JpYmVycy5sZW5ndGgsRCxHO2lmKEY+MCl7Rz1GLTE7ZG97 RD1FLnN1YnNjcmliZXJzW0ddO2lmKEQmJkQub2JqPT1JJiZELmZuPT1IKXtyZXR1 cm4gdHJ1ZTt9fXdoaWxlKEctLSk7fXJldHVybiBmYWxzZTt9O1lBSE9PLmxhbmcu YXVnbWVudFByb3RvKEEsWUFIT08udXRpbC5FdmVudFByb3ZpZGVyKTt9KCkpO1lB SE9PLndpZGdldC5EYXRlTWF0aD17REFZOiJEIixXRUVLOiJXIixZRUFSOiJZIixN T05USDoiTSIsT05FX0RBWV9NUzoxMDAwKjYwKjYwKjI0LFdFRUtfT05FX0pBTl9E QVRFOjEsYWRkOmZ1bmN0aW9uKEEsRCxDKXt2YXIgRj1uZXcgRGF0ZShBLmdldFRp bWUoKSk7c3dpdGNoKEQpe2Nhc2UgdGhpcy5NT05USDp2YXIgRT1BLmdldE1vbnRo KCkrQzt2YXIgQj0wO2lmKEU8MCl7d2hpbGUoRTwwKXtFKz0xMjtCLT0xO319ZWxz ZXtpZihFPjExKXt3aGlsZShFPjExKXtFLT0xMjtCKz0xO319fUYuc2V0TW9udGgo RSk7Ri5zZXRGdWxsWWVhcihBLmdldEZ1bGxZZWFyKCkrQik7YnJlYWs7Y2FzZSB0 aGlzLkRBWTp0aGlzLl9hZGREYXlzKEYsQyk7YnJlYWs7Y2FzZSB0aGlzLllFQVI6 Ri5zZXRGdWxsWWVhcihBLmdldEZ1bGxZZWFyKCkrQyk7YnJlYWs7Y2FzZSB0aGlz LldFRUs6dGhpcy5fYWRkRGF5cyhGLChDKjcpKTticmVhazt9cmV0dXJuIEY7fSxf YWRkRGF5czpmdW5jdGlvbihELEMpe2lmKFlBSE9PLmVudi51YS53ZWJraXQmJllB SE9PLmVudi51YS53ZWJraXQ8NDIwKXtpZihDPDApe2Zvcih2YXIgQj0tMTI4O0M8 QjtDLT1CKXtELnNldERhdGUoRC5nZXREYXRlKCkrQik7fX1lbHNle2Zvcih2YXIg QT05NjtDPkE7Qy09QSl7RC5zZXREYXRlKEQuZ2V0RGF0ZSgpK0EpO319fUQuc2V0 RGF0ZShELmdldERhdGUoKStDKTt9LHN1YnRyYWN0OmZ1bmN0aW9uKEEsQyxCKXty ZXR1cm4gdGhpcy5hZGQoQSxDLChCKi0xKSk7fSxiZWZvcmU6ZnVuY3Rpb24oQyxC KXt2YXIgQT1CLmdldFRpbWUoKTtpZihDLmdldFRpbWUoKTxBKXtyZXR1cm4gdHJ1 ZTt9ZWxzZXtyZXR1cm4gZmFsc2U7fX0sYWZ0ZXI6ZnVuY3Rpb24oQyxCKXt2YXIg QT1CLmdldFRpbWUoKTtpZihDLmdldFRpbWUoKT5BKXtyZXR1cm4gdHJ1ZTt9ZWxz ZXtyZXR1cm4gZmFsc2U7fX0sYmV0d2VlbjpmdW5jdGlvbihCLEEsQyl7aWYodGhp cy5hZnRlcihCLEEpJiZ0aGlzLmJlZm9yZShCLEMpKXtyZXR1cm4gdHJ1ZTt9ZWxz ZXtyZXR1cm4gZmFsc2U7fX0sZ2V0SmFuMTpmdW5jdGlvbihBKXtyZXR1cm4gdGhp cy5nZXREYXRlKEEsMCwxKTt9LGdldERheU9mZnNldDpmdW5jdGlvbihCLEQpe3Zh ciBDPXRoaXMuZ2V0SmFuMShEKTt2YXIgQT1NYXRoLmNlaWwoKEIuZ2V0VGltZSgp LUMuZ2V0VGltZSgpKS90aGlzLk9ORV9EQVlfTVMpO3JldHVybiBBO30sZ2V0V2Vl a051bWJlcjpmdW5jdGlvbihFLEIsSCl7Qj1CfHwwO0g9SHx8dGhpcy5XRUVLX09O RV9KQU5fREFURTt2YXIgST10aGlzLmNsZWFyVGltZShFKSxNLE47aWYoSS5nZXRE YXkoKT09PUIpe009STt9ZWxzZXtNPXRoaXMuZ2V0Rmlyc3REYXlPZldlZWsoSSxC KTt9dmFyIEo9TS5nZXRGdWxsWWVhcigpLEM9TS5nZXRUaW1lKCk7Tj1uZXcgRGF0 ZShNLmdldFRpbWUoKSs2KnRoaXMuT05FX0RBWV9NUyk7dmFyIEc7aWYoSiE9PU4u Z2V0RnVsbFllYXIoKSYmTi5nZXREYXRlKCk+PUgpe0c9MTt9ZWxzZXt2YXIgRj10 aGlzLmNsZWFyVGltZSh0aGlzLmdldERhdGUoSiwwLEgpKSxBPXRoaXMuZ2V0Rmly c3REYXlPZldlZWsoRixCKTt2YXIgSz1NYXRoLnJvdW5kKChJLmdldFRpbWUoKS1B LmdldFRpbWUoKSkvdGhpcy5PTkVfREFZX01TKTt2YXIgTD1LJTc7dmFyIEQ9KEst TCkvNztHPUQrMTt9cmV0dXJuIEc7fSxnZXRGaXJzdERheU9mV2VlazpmdW5jdGlv bihELEEpe0E9QXx8MDt2YXIgQj1ELmdldERheSgpLEM9KEItQSs3KSU3O3JldHVy biB0aGlzLnN1YnRyYWN0KEQsdGhpcy5EQVksQyk7fSxpc1llYXJPdmVybGFwV2Vl azpmdW5jdGlvbihBKXt2YXIgQz1mYWxzZTt2YXIgQj10aGlzLmFkZChBLHRoaXMu REFZLDYpO2lmKEIuZ2V0RnVsbFllYXIoKSE9QS5nZXRGdWxsWWVhcigpKXtDPXRy dWU7fXJldHVybiBDO30saXNNb250aE92ZXJsYXBXZWVrOmZ1bmN0aW9uKEEpe3Zh ciBDPWZhbHNlO3ZhciBCPXRoaXMuYWRkKEEsdGhpcy5EQVksNik7aWYoQi5nZXRN b250aCgpIT1BLmdldE1vbnRoKCkpe0M9dHJ1ZTt9cmV0dXJuIEM7fSxmaW5kTW9u dGhTdGFydDpmdW5jdGlvbihBKXt2YXIgQj10aGlzLmdldERhdGUoQS5nZXRGdWxs WWVhcigpLEEuZ2V0TW9udGgoKSwxKTtyZXR1cm4gQjt9LGZpbmRNb250aEVuZDpm dW5jdGlvbihCKXt2YXIgRD10aGlzLmZpbmRNb250aFN0YXJ0KEIpO3ZhciBDPXRo aXMuYWRkKEQsdGhpcy5NT05USCwxKTt2YXIgQT10aGlzLnN1YnRyYWN0KEMsdGhp cy5EQVksMSk7cmV0dXJuIEE7fSxjbGVhclRpbWU6ZnVuY3Rpb24oQSl7QS5zZXRI b3VycygxMiwwLDAsMCk7cmV0dXJuIEE7fSxnZXREYXRlOmZ1bmN0aW9uKEQsQSxD KXt2YXIgQj1udWxsO2lmKFlBSE9PLmxhbmcuaXNVbmRlZmluZWQoQykpe0M9MTt9 aWYoRD49MTAwKXtCPW5ldyBEYXRlKEQsQSxDKTt9ZWxzZXtCPW5ldyBEYXRlKCk7 Qi5zZXRGdWxsWWVhcihEKTtCLnNldE1vbnRoKEEpO0Iuc2V0RGF0ZShDKTtCLnNl dEhvdXJzKDAsMCwwLDApO31yZXR1cm4gQjt9fTsoZnVuY3Rpb24oKXt2YXIgQz1Z QUhPTy51dGlsLkRvbSxBPVlBSE9PLnV0aWwuRXZlbnQsRT1ZQUhPTy5sYW5nLEQ9 WUFIT08ud2lkZ2V0LkRhdGVNYXRoO2Z1bmN0aW9uIEYoSSxHLEgpe3RoaXMuaW5p dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fUYuSU1HX1JPT1Q9bnVsbDtGLkRBVEU9 IkQiO0YuTU9OVEhfREFZPSJNRCI7Ri5XRUVLREFZPSJXRCI7Ri5SQU5HRT0iUiI7 Ri5NT05USD0iTSI7Ri5ESVNQTEFZX0RBWVM9NDI7Ri5TVE9QX1JFTkRFUj0iUyI7 Ri5TSE9SVD0ic2hvcnQiO0YuTE9ORz0ibG9uZyI7Ri5NRURJVU09Im1lZGl1bSI7 Ri5PTkVfQ0hBUj0iMWNoYXIiO0YuX0RFRkFVTFRfQ09ORklHPXtQQUdFREFURTp7 a2V5OiJwYWdlZGF0ZSIsdmFsdWU6bnVsbH0sU0VMRUNURUQ6e2tleToic2VsZWN0 ZWQiLHZhbHVlOm51bGx9LFRJVExFOntrZXk6InRpdGxlIix2YWx1ZToiIn0sQ0xP U0U6e2tleToiY2xvc2UiLHZhbHVlOmZhbHNlfSxJRlJBTUU6e2tleToiaWZyYW1l Iix2YWx1ZTooWUFIT08uZW52LnVhLmllJiZZQUhPTy5lbnYudWEuaWU8PTYpP3Ry dWU6ZmFsc2V9LE1JTkRBVEU6e2tleToibWluZGF0ZSIsdmFsdWU6bnVsbH0sTUFY REFURTp7a2V5OiJtYXhkYXRlIix2YWx1ZTpudWxsfSxNVUxUSV9TRUxFQ1Q6e2tl eToibXVsdGlfc2VsZWN0Iix2YWx1ZTpmYWxzZX0sU1RBUlRfV0VFS0RBWTp7a2V5 OiJzdGFydF93ZWVrZGF5Iix2YWx1ZTowfSxTSE9XX1dFRUtEQVlTOntrZXk6InNo b3dfd2Vla2RheXMiLHZhbHVlOnRydWV9LFNIT1dfV0VFS19IRUFERVI6e2tleToi c2hvd193ZWVrX2hlYWRlciIsdmFsdWU6ZmFsc2V9LFNIT1dfV0VFS19GT09URVI6 e2tleToic2hvd193ZWVrX2Zvb3RlciIsdmFsdWU6ZmFsc2V9LEhJREVfQkxBTktf V0VFS1M6e2tleToiaGlkZV9ibGFua193ZWVrcyIsdmFsdWU6ZmFsc2V9LE5BVl9B UlJPV19MRUZUOntrZXk6Im5hdl9hcnJvd19sZWZ0Iix2YWx1ZTpudWxsfSxOQVZf QVJST1dfUklHSFQ6e2tleToibmF2X2Fycm93X3JpZ2h0Iix2YWx1ZTpudWxsfSxN T05USFNfU0hPUlQ6e2tleToibW9udGhzX3Nob3J0Iix2YWx1ZTpbIkphbiIsIkZl YiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9j dCIsIk5vdiIsIkRlYyJdfSxNT05USFNfTE9ORzp7a2V5OiJtb250aHNfbG9uZyIs dmFsdWU6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5 IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwi Tm92ZW1iZXIiLCJEZWNlbWJlciJdfSxXRUVLREFZU18xQ0hBUjp7a2V5OiJ3ZWVr ZGF5c18xY2hhciIsdmFsdWU6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl19 LFdFRUtEQVlTX1NIT1JUOntrZXk6IndlZWtkYXlzX3Nob3J0Iix2YWx1ZTpbIlN1 IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl19LFdFRUtEQVlTX01FRElV TTp7a2V5OiJ3ZWVrZGF5c19tZWRpdW0iLHZhbHVlOlsiU3VuIiwiTW9uIiwiVHVl IiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il19LFdFRUtEQVlTX0xPTkc6e2tleToi d2Vla2RheXNfbG9uZyIsdmFsdWU6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5 IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSxM T0NBTEVfTU9OVEhTOntrZXk6ImxvY2FsZV9tb250aHMiLHZhbHVlOiJsb25nIn0s TE9DQUxFX1dFRUtEQVlTOntrZXk6ImxvY2FsZV93ZWVrZGF5cyIsdmFsdWU6InNo b3J0In0sREFURV9ERUxJTUlURVI6e2tleToiZGF0ZV9kZWxpbWl0ZXIiLHZhbHVl OiIsIn0sREFURV9GSUVMRF9ERUxJTUlURVI6e2tleToiZGF0ZV9maWVsZF9kZWxp bWl0ZXIiLHZhbHVlOiIvIn0sREFURV9SQU5HRV9ERUxJTUlURVI6e2tleToiZGF0 ZV9yYW5nZV9kZWxpbWl0ZXIiLHZhbHVlOiItIn0sTVlfTU9OVEhfUE9TSVRJT046 e2tleToibXlfbW9udGhfcG9zaXRpb24iLHZhbHVlOjF9LE1ZX1lFQVJfUE9TSVRJ T046e2tleToibXlfeWVhcl9wb3NpdGlvbiIsdmFsdWU6Mn0sTURfTU9OVEhfUE9T SVRJT046e2tleToibWRfbW9udGhfcG9zaXRpb24iLHZhbHVlOjF9LE1EX0RBWV9Q T1NJVElPTjp7a2V5OiJtZF9kYXlfcG9zaXRpb24iLHZhbHVlOjJ9LE1EWV9NT05U SF9QT1NJVElPTjp7a2V5OiJtZHlfbW9udGhfcG9zaXRpb24iLHZhbHVlOjF9LE1E WV9EQVlfUE9TSVRJT046e2tleToibWR5X2RheV9wb3NpdGlvbiIsdmFsdWU6Mn0s TURZX1lFQVJfUE9TSVRJT046e2tleToibWR5X3llYXJfcG9zaXRpb24iLHZhbHVl OjN9LE1ZX0xBQkVMX01PTlRIX1BPU0lUSU9OOntrZXk6Im15X2xhYmVsX21vbnRo X3Bvc2l0aW9uIix2YWx1ZToxfSxNWV9MQUJFTF9ZRUFSX1BPU0lUSU9OOntrZXk6 Im15X2xhYmVsX3llYXJfcG9zaXRpb24iLHZhbHVlOjJ9LE1ZX0xBQkVMX01PTlRI X1NVRkZJWDp7a2V5OiJteV9sYWJlbF9tb250aF9zdWZmaXgiLHZhbHVlOiIgIn0s TVlfTEFCRUxfWUVBUl9TVUZGSVg6e2tleToibXlfbGFiZWxfeWVhcl9zdWZmaXgi LHZhbHVlOiIifSxOQVY6e2tleToibmF2aWdhdG9yIix2YWx1ZTpudWxsfSxTVFJJ TkdTOntrZXk6InN0cmluZ3MiLHZhbHVlOntwcmV2aW91c01vbnRoOiJQcmV2aW91 cyBNb250aCIsbmV4dE1vbnRoOiJOZXh0IE1vbnRoIixjbG9zZToiQ2xvc2UifSxz dXBlcmNlZGVzOlsiY2xvc2UiLCJ0aXRsZSJdfX07dmFyIEI9Ri5fREVGQVVMVF9D T05GSUc7Ri5fRVZFTlRfVFlQRVM9e0JFRk9SRV9TRUxFQ1Q6ImJlZm9yZVNlbGVj dCIsU0VMRUNUOiJzZWxlY3QiLEJFRk9SRV9ERVNFTEVDVDoiYmVmb3JlRGVzZWxl Y3QiLERFU0VMRUNUOiJkZXNlbGVjdCIsQ0hBTkdFX1BBR0U6ImNoYW5nZVBhZ2Ui LEJFRk9SRV9SRU5ERVI6ImJlZm9yZVJlbmRlciIsUkVOREVSOiJyZW5kZXIiLEJF Rk9SRV9ERVNUUk9ZOiJiZWZvcmVEZXN0cm95IixERVNUUk9ZOiJkZXN0cm95IixS RVNFVDoicmVzZXQiLENMRUFSOiJjbGVhciIsQkVGT1JFX0hJREU6ImJlZm9yZUhp ZGUiLEhJREU6ImhpZGUiLEJFRk9SRV9TSE9XOiJiZWZvcmVTaG93IixTSE9XOiJz aG93IixCRUZPUkVfSElERV9OQVY6ImJlZm9yZUhpZGVOYXYiLEhJREVfTkFWOiJo aWRlTmF2IixCRUZPUkVfU0hPV19OQVY6ImJlZm9yZVNob3dOYXYiLFNIT1dfTkFW OiJzaG93TmF2IixCRUZPUkVfUkVOREVSX05BVjoiYmVmb3JlUmVuZGVyTmF2IixS RU5ERVJfTkFWOiJyZW5kZXJOYXYifTtGLl9TVFlMRVM9e0NTU19ST1dfSEVBREVS OiJjYWxyb3doZWFkIixDU1NfUk9XX0ZPT1RFUjoiY2Fscm93Zm9vdCIsQ1NTX0NF TEw6ImNhbGNlbGwiLENTU19DRUxMX1NFTEVDVE9SOiJzZWxlY3RvciIsQ1NTX0NF TExfU0VMRUNURUQ6InNlbGVjdGVkIixDU1NfQ0VMTF9TRUxFQ1RBQkxFOiJzZWxl Y3RhYmxlIixDU1NfQ0VMTF9SRVNUUklDVEVEOiJyZXN0cmljdGVkIixDU1NfQ0VM TF9UT0RBWToidG9kYXkiLENTU19DRUxMX09PTToib29tIixDU1NfQ0VMTF9PT0I6 InByZXZpb3VzIixDU1NfSEVBREVSOiJjYWxoZWFkZXIiLENTU19IRUFERVJfVEVY VDoiY2FsaGVhZCIsQ1NTX0JPRFk6ImNhbGJvZHkiLENTU19XRUVLREFZX0NFTEw6 ImNhbHdlZWtkYXljZWxsIixDU1NfV0VFS0RBWV9ST1c6ImNhbHdlZWtkYXlyb3ci LENTU19GT09URVI6ImNhbGZvb3QiLENTU19DQUxFTkRBUjoieXVpLWNhbGVuZGFy IixDU1NfU0lOR0xFOiJzaW5nbGUiLENTU19DT05UQUlORVI6Inl1aS1jYWxjb250 YWluZXIiLENTU19OQVZfTEVGVDoiY2FsbmF2bGVmdCIsQ1NTX05BVl9SSUdIVDoi Y2FsbmF2cmlnaHQiLENTU19OQVY6ImNhbG5hdiIsQ1NTX0NMT1NFOiJjYWxjbG9z ZSIsQ1NTX0NFTExfVE9QOiJjYWxjZWxsdG9wIixDU1NfQ0VMTF9MRUZUOiJjYWxj ZWxsbGVmdCIsQ1NTX0NFTExfUklHSFQ6ImNhbGNlbGxyaWdodCIsQ1NTX0NFTExf Qk9UVE9NOiJjYWxjZWxsYm90dG9tIixDU1NfQ0VMTF9IT1ZFUjoiY2FsY2VsbGhv dmVyIixDU1NfQ0VMTF9ISUdITElHSFQxOiJoaWdobGlnaHQxIixDU1NfQ0VMTF9I SUdITElHSFQyOiJoaWdobGlnaHQyIixDU1NfQ0VMTF9ISUdITElHSFQzOiJoaWdo bGlnaHQzIixDU1NfQ0VMTF9ISUdITElHSFQ0OiJoaWdobGlnaHQ0In07Ri5wcm90 b3R5cGU9e0NvbmZpZzpudWxsLHBhcmVudDpudWxsLGluZGV4Oi0xLGNlbGxzOm51 bGwsY2VsbERhdGVzOm51bGwsaWQ6bnVsbCxjb250YWluZXJJZDpudWxsLG9Eb21D b250YWluZXI6bnVsbCx0b2RheTpudWxsLHJlbmRlclN0YWNrOm51bGwsX3JlbmRl clN0YWNrOm51bGwsb05hdmlnYXRvcjpudWxsLF9zZWxlY3RlZERhdGVzOm51bGws ZG9tRXZlbnRNYXA6bnVsbCxfcGFyc2VBcmdzOmZ1bmN0aW9uKEgpe3ZhciBHPXtp ZDpudWxsLGNvbnRhaW5lcjpudWxsLGNvbmZpZzpudWxsfTtpZihIJiZILmxlbmd0 aCYmSC5sZW5ndGg+MCl7c3dpdGNoKEgubGVuZ3RoKXtjYXNlIDE6Ry5pZD1udWxs O0cuY29udGFpbmVyPUhbMF07Ry5jb25maWc9bnVsbDticmVhaztjYXNlIDI6aWYo RS5pc09iamVjdChIWzFdKSYmIUhbMV0udGFnTmFtZSYmIShIWzFdaW5zdGFuY2Vv ZiBTdHJpbmcpKXtHLmlkPW51bGw7Ry5jb250YWluZXI9SFswXTtHLmNvbmZpZz1I WzFdO31lbHNle0cuaWQ9SFswXTtHLmNvbnRhaW5lcj1IWzFdO0cuY29uZmlnPW51 bGw7fWJyZWFrO2RlZmF1bHQ6Ry5pZD1IWzBdO0cuY29udGFpbmVyPUhbMV07Ry5j b25maWc9SFsyXTticmVhazt9fWVsc2V7fXJldHVybiBHO30saW5pdDpmdW5jdGlv bihKLEgsSSl7dmFyIEc9dGhpcy5fcGFyc2VBcmdzKGFyZ3VtZW50cyk7Sj1HLmlk O0g9Ry5jb250YWluZXI7ST1HLmNvbmZpZzt0aGlzLm9Eb21Db250YWluZXI9Qy5n ZXQoSCk7aWYoIXRoaXMub0RvbUNvbnRhaW5lci5pZCl7dGhpcy5vRG9tQ29udGFp bmVyLmlkPUMuZ2VuZXJhdGVJZCgpO31pZighSil7Sj10aGlzLm9Eb21Db250YWlu ZXIuaWQrIl90Ijt9dGhpcy5pZD1KO3RoaXMuY29udGFpbmVySWQ9dGhpcy5vRG9t Q29udGFpbmVyLmlkO3RoaXMuaW5pdEV2ZW50cygpO3RoaXMudG9kYXk9bmV3IERh dGUoKTtELmNsZWFyVGltZSh0aGlzLnRvZGF5KTt0aGlzLmNmZz1uZXcgWUFIT08u dXRpbC5Db25maWcodGhpcyk7dGhpcy5PcHRpb25zPXt9O3RoaXMuTG9jYWxlPXt9 O3RoaXMuaW5pdFN0eWxlcygpO0MuYWRkQ2xhc3ModGhpcy5vRG9tQ29udGFpbmVy LHRoaXMuU3R5bGUuQ1NTX0NPTlRBSU5FUik7Qy5hZGRDbGFzcyh0aGlzLm9Eb21D b250YWluZXIsdGhpcy5TdHlsZS5DU1NfU0lOR0xFKTt0aGlzLmNlbGxEYXRlcz1b XTt0aGlzLmNlbGxzPVtdO3RoaXMucmVuZGVyU3RhY2s9W107dGhpcy5fcmVuZGVy U3RhY2s9W107dGhpcy5zZXR1cENvbmZpZygpO2lmKEkpe3RoaXMuY2ZnLmFwcGx5 Q29uZmlnKEksdHJ1ZSk7fXRoaXMuY2ZnLmZpcmVRdWV1ZSgpO30sY29uZmlnSWZy YW1lOmZ1bmN0aW9uKEksSCxKKXt2YXIgRz1IWzBdO2lmKCF0aGlzLnBhcmVudCl7 aWYoQy5pbkRvY3VtZW50KHRoaXMub0RvbUNvbnRhaW5lcikpe2lmKEcpe3ZhciBL PUMuZ2V0U3R5bGUodGhpcy5vRG9tQ29udGFpbmVyLCJwb3NpdGlvbiIpO2lmKEs9 PSJhYnNvbHV0ZSJ8fEs9PSJyZWxhdGl2ZSIpe2lmKCFDLmluRG9jdW1lbnQodGhp cy5pZnJhbWUpKXt0aGlzLmlmcmFtZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJp ZnJhbWUiKTt0aGlzLmlmcmFtZS5zcmM9ImphdmFzY3JpcHQ6ZmFsc2U7IjtDLnNl dFN0eWxlKHRoaXMuaWZyYW1lLCJvcGFjaXR5IiwiMCIpO2lmKFlBSE9PLmVudi51 YS5pZSYmWUFIT08uZW52LnVhLmllPD02KXtDLmFkZENsYXNzKHRoaXMuaWZyYW1l LCJmaXhlZHNpemUiKTt9dGhpcy5vRG9tQ29udGFpbmVyLmluc2VydEJlZm9yZSh0 aGlzLmlmcmFtZSx0aGlzLm9Eb21Db250YWluZXIuZmlyc3RDaGlsZCk7fX19ZWxz ZXtpZih0aGlzLmlmcmFtZSl7aWYodGhpcy5pZnJhbWUucGFyZW50Tm9kZSl7dGhp cy5pZnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmlmcmFtZSk7fXRo aXMuaWZyYW1lPW51bGw7fX19fX0sY29uZmlnVGl0bGU6ZnVuY3Rpb24oSCxHLEkp e3ZhciBLPUdbMF07aWYoSyl7dGhpcy5jcmVhdGVUaXRsZUJhcihLKTt9ZWxzZXt2 YXIgSj10aGlzLmNmZy5nZXRQcm9wZXJ0eShCLkNMT1NFLmtleSk7aWYoIUope3Ro aXMucmVtb3ZlVGl0bGVCYXIoKTt9ZWxzZXt0aGlzLmNyZWF0ZVRpdGxlQmFyKCIm IzE2MDsiKTt9fX0sY29uZmlnQ2xvc2U6ZnVuY3Rpb24oSCxHLEkpe3ZhciBLPUdb MF0sSj10aGlzLmNmZy5nZXRQcm9wZXJ0eShCLlRJVExFLmtleSk7aWYoSyl7aWYo IUope3RoaXMuY3JlYXRlVGl0bGVCYXIoIiYjMTYwOyIpO310aGlzLmNyZWF0ZUNs b3NlQnV0dG9uKCk7fWVsc2V7dGhpcy5yZW1vdmVDbG9zZUJ1dHRvbigpO2lmKCFK KXt0aGlzLnJlbW92ZVRpdGxlQmFyKCk7fX19LGluaXRFdmVudHM6ZnVuY3Rpb24o KXt2YXIgRz1GLl9FVkVOVF9UWVBFUyxJPVlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQs SD10aGlzO0guYmVmb3JlU2VsZWN0RXZlbnQ9bmV3IEkoRy5CRUZPUkVfU0VMRUNU KTtILnNlbGVjdEV2ZW50PW5ldyBJKEcuU0VMRUNUKTtILmJlZm9yZURlc2VsZWN0 RXZlbnQ9bmV3IEkoRy5CRUZPUkVfREVTRUxFQ1QpO0guZGVzZWxlY3RFdmVudD1u ZXcgSShHLkRFU0VMRUNUKTtILmNoYW5nZVBhZ2VFdmVudD1uZXcgSShHLkNIQU5H RV9QQUdFKTtILmJlZm9yZVJlbmRlckV2ZW50PW5ldyBJKEcuQkVGT1JFX1JFTkRF Uik7SC5yZW5kZXJFdmVudD1uZXcgSShHLlJFTkRFUik7SC5iZWZvcmVEZXN0cm95 RXZlbnQ9bmV3IEkoRy5CRUZPUkVfREVTVFJPWSk7SC5kZXN0cm95RXZlbnQ9bmV3 IEkoRy5ERVNUUk9ZKTtILnJlc2V0RXZlbnQ9bmV3IEkoRy5SRVNFVCk7SC5jbGVh ckV2ZW50PW5ldyBJKEcuQ0xFQVIpO0guYmVmb3JlU2hvd0V2ZW50PW5ldyBJKEcu QkVGT1JFX1NIT1cpO0guc2hvd0V2ZW50PW5ldyBJKEcuU0hPVyk7SC5iZWZvcmVI aWRlRXZlbnQ9bmV3IEkoRy5CRUZPUkVfSElERSk7SC5oaWRlRXZlbnQ9bmV3IEko Ry5ISURFKTtILmJlZm9yZVNob3dOYXZFdmVudD1uZXcgSShHLkJFRk9SRV9TSE9X X05BVik7SC5zaG93TmF2RXZlbnQ9bmV3IEkoRy5TSE9XX05BVik7SC5iZWZvcmVI aWRlTmF2RXZlbnQ9bmV3IEkoRy5CRUZPUkVfSElERV9OQVYpO0guaGlkZU5hdkV2 ZW50PW5ldyBJKEcuSElERV9OQVYpO0guYmVmb3JlUmVuZGVyTmF2RXZlbnQ9bmV3 IEkoRy5CRUZPUkVfUkVOREVSX05BVik7SC5yZW5kZXJOYXZFdmVudD1uZXcgSShH LlJFTkRFUl9OQVYpO0guYmVmb3JlU2VsZWN0RXZlbnQuc3Vic2NyaWJlKEgub25C ZWZvcmVTZWxlY3QsdGhpcyx0cnVlKTtILnNlbGVjdEV2ZW50LnN1YnNjcmliZShI Lm9uU2VsZWN0LHRoaXMsdHJ1ZSk7SC5iZWZvcmVEZXNlbGVjdEV2ZW50LnN1YnNj cmliZShILm9uQmVmb3JlRGVzZWxlY3QsdGhpcyx0cnVlKTtILmRlc2VsZWN0RXZl bnQuc3Vic2NyaWJlKEgub25EZXNlbGVjdCx0aGlzLHRydWUpO0guY2hhbmdlUGFn ZUV2ZW50LnN1YnNjcmliZShILm9uQ2hhbmdlUGFnZSx0aGlzLHRydWUpO0gucmVu ZGVyRXZlbnQuc3Vic2NyaWJlKEgub25SZW5kZXIsdGhpcyx0cnVlKTtILnJlc2V0 RXZlbnQuc3Vic2NyaWJlKEgub25SZXNldCx0aGlzLHRydWUpO0guY2xlYXJFdmVu dC5zdWJzY3JpYmUoSC5vbkNsZWFyLHRoaXMsdHJ1ZSk7fSxkb1ByZXZpb3VzTW9u dGhOYXY6ZnVuY3Rpb24oSCxHKXtBLnByZXZlbnREZWZhdWx0KEgpO3NldFRpbWVv dXQoZnVuY3Rpb24oKXtHLnByZXZpb3VzTW9udGgoKTt2YXIgST1DLmdldEVsZW1l bnRzQnlDbGFzc05hbWUoRy5TdHlsZS5DU1NfTkFWX0xFRlQsImEiLEcub0RvbUNv bnRhaW5lcik7aWYoSSYmSVswXSl7dHJ5e0lbMF0uZm9jdXMoKTt9Y2F0Y2goSil7 fX19LDApO30sZG9OZXh0TW9udGhOYXY6ZnVuY3Rpb24oSCxHKXtBLnByZXZlbnRE ZWZhdWx0KEgpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtHLm5leHRNb250aCgpO3Zh ciBJPUMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShHLlN0eWxlLkNTU19OQVZfUklH SFQsImEiLEcub0RvbUNvbnRhaW5lcik7aWYoSSYmSVswXSl7dHJ5e0lbMF0uZm9j dXMoKTt9Y2F0Y2goSil7fX19LDApO30sZG9TZWxlY3RDZWxsOmZ1bmN0aW9uKE0s Ryl7dmFyIFIsTyxJLEw7dmFyIE49QS5nZXRUYXJnZXQoTSksSD1OLnRhZ05hbWUu dG9Mb3dlckNhc2UoKSxLPWZhbHNlO3doaWxlKEghPSJ0ZCImJiFDLmhhc0NsYXNz KE4sRy5TdHlsZS5DU1NfQ0VMTF9TRUxFQ1RBQkxFKSl7aWYoIUsmJkg9PSJhIiYm Qy5oYXNDbGFzcyhOLEcuU3R5bGUuQ1NTX0NFTExfU0VMRUNUT1IpKXtLPXRydWU7 fU49Ti5wYXJlbnROb2RlO0g9Ti50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoTj09 dGhpcy5vRG9tQ29udGFpbmVyfHxIPT0iaHRtbCIpe3JldHVybjt9fWlmKEspe0Eu cHJldmVudERlZmF1bHQoTSk7fVI9TjtpZihDLmhhc0NsYXNzKFIsRy5TdHlsZS5D U1NfQ0VMTF9TRUxFQ1RBQkxFKSl7TD1HLmdldEluZGV4RnJvbUlkKFIuaWQpO2lm KEw+LTEpe089Ry5jZWxsRGF0ZXNbTF07aWYoTyl7ST1ELmdldERhdGUoT1swXSxP WzFdLTEsT1syXSk7dmFyIFE7aWYoRy5PcHRpb25zLk1VTFRJX1NFTEVDVCl7UT1S LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoUSl7US5ibHVyKCk7fXZh ciBKPUcuY2VsbERhdGVzW0xdO3ZhciBQPUcuX2luZGV4T2ZTZWxlY3RlZEZpZWxk QXJyYXkoSik7aWYoUD4tMSl7Ry5kZXNlbGVjdENlbGwoTCk7fWVsc2V7Ry5zZWxl Y3RDZWxsKEwpO319ZWxzZXtRPVIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVsw XTtpZihRKXtRLmJsdXIoKTt9Ry5zZWxlY3RDZWxsKEwpO319fX19LGRvQ2VsbE1v dXNlT3ZlcjpmdW5jdGlvbihJLEgpe3ZhciBHO2lmKEkpe0c9QS5nZXRUYXJnZXQo SSk7fWVsc2V7Rz10aGlzO313aGlsZShHLnRhZ05hbWUmJkcudGFnTmFtZS50b0xv d2VyQ2FzZSgpIT0idGQiKXtHPUcucGFyZW50Tm9kZTtpZighRy50YWdOYW1lfHxH LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiKXtyZXR1cm47fX1pZihDLmhh c0NsYXNzKEcsSC5TdHlsZS5DU1NfQ0VMTF9TRUxFQ1RBQkxFKSl7Qy5hZGRDbGFz cyhHLEguU3R5bGUuQ1NTX0NFTExfSE9WRVIpO319LGRvQ2VsbE1vdXNlT3V0OmZ1 bmN0aW9uKEksSCl7dmFyIEc7aWYoSSl7Rz1BLmdldFRhcmdldChJKTt9ZWxzZXtH PXRoaXM7fXdoaWxlKEcudGFnTmFtZSYmRy50YWdOYW1lLnRvTG93ZXJDYXNlKCkh PSJ0ZCIpe0c9Ry5wYXJlbnROb2RlO2lmKCFHLnRhZ05hbWV8fEcudGFnTmFtZS50 b0xvd2VyQ2FzZSgpPT0iaHRtbCIpe3JldHVybjt9fWlmKEMuaGFzQ2xhc3MoRyxI LlN0eWxlLkNTU19DRUxMX1NFTEVDVEFCTEUpKXtDLnJlbW92ZUNsYXNzKEcsSC5T dHlsZS5DU1NfQ0VMTF9IT1ZFUik7fX0sc2V0dXBDb25maWc6ZnVuY3Rpb24oKXt2 YXIgRz10aGlzLmNmZztHLmFkZFByb3BlcnR5KEIuUEFHRURBVEUua2V5LHt2YWx1 ZTpuZXcgRGF0ZSgpLGhhbmRsZXI6dGhpcy5jb25maWdQYWdlRGF0ZX0pO0cuYWRk UHJvcGVydHkoQi5TRUxFQ1RFRC5rZXkse3ZhbHVlOltdLGhhbmRsZXI6dGhpcy5j b25maWdTZWxlY3RlZH0pO0cuYWRkUHJvcGVydHkoQi5USVRMRS5rZXkse3ZhbHVl OkIuVElUTEUudmFsdWUsaGFuZGxlcjp0aGlzLmNvbmZpZ1RpdGxlfSk7Ry5hZGRQ cm9wZXJ0eShCLkNMT1NFLmtleSx7dmFsdWU6Qi5DTE9TRS52YWx1ZSxoYW5kbGVy OnRoaXMuY29uZmlnQ2xvc2V9KTtHLmFkZFByb3BlcnR5KEIuSUZSQU1FLmtleSx7 dmFsdWU6Qi5JRlJBTUUudmFsdWUsaGFuZGxlcjp0aGlzLmNvbmZpZ0lmcmFtZSx2 YWxpZGF0b3I6Ry5jaGVja0Jvb2xlYW59KTtHLmFkZFByb3BlcnR5KEIuTUlOREFU RS5rZXkse3ZhbHVlOkIuTUlOREFURS52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmln TWluRGF0ZX0pO0cuYWRkUHJvcGVydHkoQi5NQVhEQVRFLmtleSx7dmFsdWU6Qi5N QVhEQVRFLnZhbHVlLGhhbmRsZXI6dGhpcy5jb25maWdNYXhEYXRlfSk7Ry5hZGRQ cm9wZXJ0eShCLk1VTFRJX1NFTEVDVC5rZXkse3ZhbHVlOkIuTVVMVElfU0VMRUNU LnZhbHVlLGhhbmRsZXI6dGhpcy5jb25maWdPcHRpb25zLHZhbGlkYXRvcjpHLmNo ZWNrQm9vbGVhbn0pO0cuYWRkUHJvcGVydHkoQi5TVEFSVF9XRUVLREFZLmtleSx7 dmFsdWU6Qi5TVEFSVF9XRUVLREFZLnZhbHVlLGhhbmRsZXI6dGhpcy5jb25maWdP cHRpb25zLHZhbGlkYXRvcjpHLmNoZWNrTnVtYmVyfSk7Ry5hZGRQcm9wZXJ0eShC LlNIT1dfV0VFS0RBWVMua2V5LHt2YWx1ZTpCLlNIT1dfV0VFS0RBWVMudmFsdWUs aGFuZGxlcjp0aGlzLmNvbmZpZ09wdGlvbnMsdmFsaWRhdG9yOkcuY2hlY2tCb29s ZWFufSk7Ry5hZGRQcm9wZXJ0eShCLlNIT1dfV0VFS19IRUFERVIua2V5LHt2YWx1 ZTpCLlNIT1dfV0VFS19IRUFERVIudmFsdWUsaGFuZGxlcjp0aGlzLmNvbmZpZ09w dGlvbnMsdmFsaWRhdG9yOkcuY2hlY2tCb29sZWFufSk7Ry5hZGRQcm9wZXJ0eShC LlNIT1dfV0VFS19GT09URVIua2V5LHt2YWx1ZTpCLlNIT1dfV0VFS19GT09URVIu dmFsdWUsaGFuZGxlcjp0aGlzLmNvbmZpZ09wdGlvbnMsdmFsaWRhdG9yOkcuY2hl Y2tCb29sZWFufSk7Ry5hZGRQcm9wZXJ0eShCLkhJREVfQkxBTktfV0VFS1Mua2V5 LHt2YWx1ZTpCLkhJREVfQkxBTktfV0VFS1MudmFsdWUsaGFuZGxlcjp0aGlzLmNv bmZpZ09wdGlvbnMsdmFsaWRhdG9yOkcuY2hlY2tCb29sZWFufSk7Ry5hZGRQcm9w ZXJ0eShCLk5BVl9BUlJPV19MRUZULmtleSx7dmFsdWU6Qi5OQVZfQVJST1dfTEVG VC52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnT3B0aW9uc30pO0cuYWRkUHJvcGVy dHkoQi5OQVZfQVJST1dfUklHSFQua2V5LHt2YWx1ZTpCLk5BVl9BUlJPV19SSUdI VC52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnT3B0aW9uc30pO0cuYWRkUHJvcGVy dHkoQi5NT05USFNfU0hPUlQua2V5LHt2YWx1ZTpCLk1PTlRIU19TSE9SVC52YWx1 ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9wZXJ0eShCLk1P TlRIU19MT05HLmtleSx7dmFsdWU6Qi5NT05USFNfTE9ORy52YWx1ZSxoYW5kbGVy OnRoaXMuY29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9wZXJ0eShCLldFRUtEQVlTXzFD SEFSLmtleSx7dmFsdWU6Qi5XRUVLREFZU18xQ0hBUi52YWx1ZSxoYW5kbGVyOnRo aXMuY29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9wZXJ0eShCLldFRUtEQVlTX1NIT1JU LmtleSx7dmFsdWU6Qi5XRUVLREFZU19TSE9SVC52YWx1ZSxoYW5kbGVyOnRoaXMu Y29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9wZXJ0eShCLldFRUtEQVlTX01FRElVTS5r ZXkse3ZhbHVlOkIuV0VFS0RBWVNfTUVESVVNLnZhbHVlLGhhbmRsZXI6dGhpcy5j b25maWdMb2NhbGV9KTtHLmFkZFByb3BlcnR5KEIuV0VFS0RBWVNfTE9ORy5rZXks e3ZhbHVlOkIuV0VFS0RBWVNfTE9ORy52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmln TG9jYWxlfSk7dmFyIEg9ZnVuY3Rpb24oKXtHLnJlZmlyZUV2ZW50KEIuTE9DQUxF X01PTlRIUy5rZXkpO0cucmVmaXJlRXZlbnQoQi5MT0NBTEVfV0VFS0RBWVMua2V5 KTt9O0cuc3Vic2NyaWJlVG9Db25maWdFdmVudChCLlNUQVJUX1dFRUtEQVkua2V5 LEgsdGhpcyx0cnVlKTtHLnN1YnNjcmliZVRvQ29uZmlnRXZlbnQoQi5NT05USFNf U0hPUlQua2V5LEgsdGhpcyx0cnVlKTtHLnN1YnNjcmliZVRvQ29uZmlnRXZlbnQo Qi5NT05USFNfTE9ORy5rZXksSCx0aGlzLHRydWUpO0cuc3Vic2NyaWJlVG9Db25m aWdFdmVudChCLldFRUtEQVlTXzFDSEFSLmtleSxILHRoaXMsdHJ1ZSk7Ry5zdWJz Y3JpYmVUb0NvbmZpZ0V2ZW50KEIuV0VFS0RBWVNfU0hPUlQua2V5LEgsdGhpcyx0 cnVlKTtHLnN1YnNjcmliZVRvQ29uZmlnRXZlbnQoQi5XRUVLREFZU19NRURJVU0u a2V5LEgsdGhpcyx0cnVlKTtHLnN1YnNjcmliZVRvQ29uZmlnRXZlbnQoQi5XRUVL REFZU19MT05HLmtleSxILHRoaXMsdHJ1ZSk7Ry5hZGRQcm9wZXJ0eShCLkxPQ0FM RV9NT05USFMua2V5LHt2YWx1ZTpCLkxPQ0FMRV9NT05USFMudmFsdWUsaGFuZGxl cjp0aGlzLmNvbmZpZ0xvY2FsZVZhbHVlc30pO0cuYWRkUHJvcGVydHkoQi5MT0NB TEVfV0VFS0RBWVMua2V5LHt2YWx1ZTpCLkxPQ0FMRV9XRUVLREFZUy52YWx1ZSxo YW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlVmFsdWVzfSk7Ry5hZGRQcm9wZXJ0eShC LkRBVEVfREVMSU1JVEVSLmtleSx7dmFsdWU6Qi5EQVRFX0RFTElNSVRFUi52YWx1 ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9wZXJ0eShCLkRB VEVfRklFTERfREVMSU1JVEVSLmtleSx7dmFsdWU6Qi5EQVRFX0ZJRUxEX0RFTElN SVRFUi52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9w ZXJ0eShCLkRBVEVfUkFOR0VfREVMSU1JVEVSLmtleSx7dmFsdWU6Qi5EQVRFX1JB TkdFX0RFTElNSVRFUi52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlfSk7 Ry5hZGRQcm9wZXJ0eShCLk1ZX01PTlRIX1BPU0lUSU9OLmtleSx7dmFsdWU6Qi5N WV9NT05USF9QT1NJVElPTi52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxl LHZhbGlkYXRvcjpHLmNoZWNrTnVtYmVyfSk7Ry5hZGRQcm9wZXJ0eShCLk1ZX1lF QVJfUE9TSVRJT04ua2V5LHt2YWx1ZTpCLk1ZX1lFQVJfUE9TSVRJT04udmFsdWUs aGFuZGxlcjp0aGlzLmNvbmZpZ0xvY2FsZSx2YWxpZGF0b3I6Ry5jaGVja051bWJl cn0pO0cuYWRkUHJvcGVydHkoQi5NRF9NT05USF9QT1NJVElPTi5rZXkse3ZhbHVl OkIuTURfTU9OVEhfUE9TSVRJT04udmFsdWUsaGFuZGxlcjp0aGlzLmNvbmZpZ0xv Y2FsZSx2YWxpZGF0b3I6Ry5jaGVja051bWJlcn0pO0cuYWRkUHJvcGVydHkoQi5N RF9EQVlfUE9TSVRJT04ua2V5LHt2YWx1ZTpCLk1EX0RBWV9QT1NJVElPTi52YWx1 ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlLHZhbGlkYXRvcjpHLmNoZWNrTnVt YmVyfSk7Ry5hZGRQcm9wZXJ0eShCLk1EWV9NT05USF9QT1NJVElPTi5rZXkse3Zh bHVlOkIuTURZX01PTlRIX1BPU0lUSU9OLnZhbHVlLGhhbmRsZXI6dGhpcy5jb25m aWdMb2NhbGUsdmFsaWRhdG9yOkcuY2hlY2tOdW1iZXJ9KTtHLmFkZFByb3BlcnR5 KEIuTURZX0RBWV9QT1NJVElPTi5rZXkse3ZhbHVlOkIuTURZX0RBWV9QT1NJVElP Ti52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlLHZhbGlkYXRvcjpHLmNo ZWNrTnVtYmVyfSk7Ry5hZGRQcm9wZXJ0eShCLk1EWV9ZRUFSX1BPU0lUSU9OLmtl eSx7dmFsdWU6Qi5NRFlfWUVBUl9QT1NJVElPTi52YWx1ZSxoYW5kbGVyOnRoaXMu Y29uZmlnTG9jYWxlLHZhbGlkYXRvcjpHLmNoZWNrTnVtYmVyfSk7Ry5hZGRQcm9w ZXJ0eShCLk1ZX0xBQkVMX01PTlRIX1BPU0lUSU9OLmtleSx7dmFsdWU6Qi5NWV9M QUJFTF9NT05USF9QT1NJVElPTi52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9j YWxlLHZhbGlkYXRvcjpHLmNoZWNrTnVtYmVyfSk7Ry5hZGRQcm9wZXJ0eShCLk1Z X0xBQkVMX1lFQVJfUE9TSVRJT04ua2V5LHt2YWx1ZTpCLk1ZX0xBQkVMX1lFQVJf UE9TSVRJT04udmFsdWUsaGFuZGxlcjp0aGlzLmNvbmZpZ0xvY2FsZSx2YWxpZGF0 b3I6Ry5jaGVja051bWJlcn0pO0cuYWRkUHJvcGVydHkoQi5NWV9MQUJFTF9NT05U SF9TVUZGSVgua2V5LHt2YWx1ZTpCLk1ZX0xBQkVMX01PTlRIX1NVRkZJWC52YWx1 ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9wZXJ0eShCLk1Z X0xBQkVMX1lFQVJfU1VGRklYLmtleSx7dmFsdWU6Qi5NWV9MQUJFTF9ZRUFSX1NV RkZJWC52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnTG9jYWxlfSk7Ry5hZGRQcm9w ZXJ0eShCLk5BVi5rZXkse3ZhbHVlOkIuTkFWLnZhbHVlLGhhbmRsZXI6dGhpcy5j b25maWdOYXZpZ2F0b3J9KTtHLmFkZFByb3BlcnR5KEIuU1RSSU5HUy5rZXkse3Zh bHVlOkIuU1RSSU5HUy52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnU3RyaW5ncyx2 YWxpZGF0b3I6ZnVuY3Rpb24oSSl7cmV0dXJuIEUuaXNPYmplY3QoSSk7fSxzdXBl cmNlZGVzOkIuU1RSSU5HUy5zdXBlcmNlZGVzfSk7fSxjb25maWdTdHJpbmdzOmZ1 bmN0aW9uKEgsRyxJKXt2YXIgSj1FLm1lcmdlKEIuU1RSSU5HUy52YWx1ZSxHWzBd KTt0aGlzLmNmZy5zZXRQcm9wZXJ0eShCLlNUUklOR1Mua2V5LEosdHJ1ZSk7fSxj b25maWdQYWdlRGF0ZTpmdW5jdGlvbihILEcsSSl7dGhpcy5jZmcuc2V0UHJvcGVy dHkoQi5QQUdFREFURS5rZXksdGhpcy5fcGFyc2VQYWdlRGF0ZShHWzBdKSx0cnVl KTt9LGNvbmZpZ01pbkRhdGU6ZnVuY3Rpb24oSCxHLEkpe3ZhciBKPUdbMF07aWYo RS5pc1N0cmluZyhKKSl7Sj10aGlzLl9wYXJzZURhdGUoSik7dGhpcy5jZmcuc2V0 UHJvcGVydHkoQi5NSU5EQVRFLmtleSxELmdldERhdGUoSlswXSwoSlsxXS0xKSxK WzJdKSk7fX0sY29uZmlnTWF4RGF0ZTpmdW5jdGlvbihILEcsSSl7dmFyIEo9R1sw XTtpZihFLmlzU3RyaW5nKEopKXtKPXRoaXMuX3BhcnNlRGF0ZShKKTt0aGlzLmNm Zy5zZXRQcm9wZXJ0eShCLk1BWERBVEUua2V5LEQuZ2V0RGF0ZShKWzBdLChKWzFd LTEpLEpbMl0pKTt9fSxjb25maWdTZWxlY3RlZDpmdW5jdGlvbihJLEcsSyl7dmFy IEg9R1swXSxKPUIuU0VMRUNURUQua2V5O2lmKEgpe2lmKEUuaXNTdHJpbmcoSCkp e3RoaXMuY2ZnLnNldFByb3BlcnR5KEosdGhpcy5fcGFyc2VEYXRlcyhIKSx0cnVl KTt9fWlmKCF0aGlzLl9zZWxlY3RlZERhdGVzKXt0aGlzLl9zZWxlY3RlZERhdGVz PXRoaXMuY2ZnLmdldFByb3BlcnR5KEopO319LGNvbmZpZ09wdGlvbnM6ZnVuY3Rp b24oSCxHLEkpe3RoaXMuT3B0aW9uc1tILnRvVXBwZXJDYXNlKCldPUdbMF07fSxj b25maWdMb2NhbGU6ZnVuY3Rpb24oSCxHLEkpe3RoaXMuTG9jYWxlW0gudG9VcHBl ckNhc2UoKV09R1swXTt0aGlzLmNmZy5yZWZpcmVFdmVudChCLkxPQ0FMRV9NT05U SFMua2V5KTt0aGlzLmNmZy5yZWZpcmVFdmVudChCLkxPQ0FMRV9XRUVLREFZUy5r ZXkpO30sY29uZmlnTG9jYWxlVmFsdWVzOmZ1bmN0aW9uKEosSSxLKXtKPUoudG9M b3dlckNhc2UoKTt2YXIgTT1JWzBdLEg9dGhpcy5jZmcsTj10aGlzLkxvY2FsZTtz d2l0Y2goSil7Y2FzZSBCLkxPQ0FMRV9NT05USFMua2V5OnN3aXRjaChNKXtjYXNl IEYuU0hPUlQ6Ti5MT0NBTEVfTU9OVEhTPUguZ2V0UHJvcGVydHkoQi5NT05USFNf U0hPUlQua2V5KS5jb25jYXQoKTticmVhaztjYXNlIEYuTE9ORzpOLkxPQ0FMRV9N T05USFM9SC5nZXRQcm9wZXJ0eShCLk1PTlRIU19MT05HLmtleSkuY29uY2F0KCk7 YnJlYWs7fWJyZWFrO2Nhc2UgQi5MT0NBTEVfV0VFS0RBWVMua2V5OnN3aXRjaChN KXtjYXNlIEYuT05FX0NIQVI6Ti5MT0NBTEVfV0VFS0RBWVM9SC5nZXRQcm9wZXJ0 eShCLldFRUtEQVlTXzFDSEFSLmtleSkuY29uY2F0KCk7YnJlYWs7Y2FzZSBGLlNI T1JUOk4uTE9DQUxFX1dFRUtEQVlTPUguZ2V0UHJvcGVydHkoQi5XRUVLREFZU19T SE9SVC5rZXkpLmNvbmNhdCgpO2JyZWFrO2Nhc2UgRi5NRURJVU06Ti5MT0NBTEVf V0VFS0RBWVM9SC5nZXRQcm9wZXJ0eShCLldFRUtEQVlTX01FRElVTS5rZXkpLmNv bmNhdCgpO2JyZWFrO2Nhc2UgRi5MT05HOk4uTE9DQUxFX1dFRUtEQVlTPUguZ2V0 UHJvcGVydHkoQi5XRUVLREFZU19MT05HLmtleSkuY29uY2F0KCk7YnJlYWs7fXZh ciBMPUguZ2V0UHJvcGVydHkoQi5TVEFSVF9XRUVLREFZLmtleSk7aWYoTD4wKXtm b3IodmFyIEc9MDtHPEw7KytHKXtOLkxPQ0FMRV9XRUVLREFZUy5wdXNoKE4uTE9D QUxFX1dFRUtEQVlTLnNoaWZ0KCkpO319YnJlYWs7fX0sY29uZmlnTmF2aWdhdG9y OmZ1bmN0aW9uKEgsRyxJKXt2YXIgSj1HWzBdO2lmKFlBSE9PLndpZGdldC5DYWxl bmRhck5hdmlnYXRvciYmKEo9PT10cnVlfHxFLmlzT2JqZWN0KEopKSl7aWYoIXRo aXMub05hdmlnYXRvcil7dGhpcy5vTmF2aWdhdG9yPW5ldyBZQUhPTy53aWRnZXQu Q2FsZW5kYXJOYXZpZ2F0b3IodGhpcyk7dGhpcy5iZWZvcmVSZW5kZXJFdmVudC5z dWJzY3JpYmUoZnVuY3Rpb24oKXtpZighdGhpcy5wYWdlcyl7dGhpcy5vTmF2aWdh dG9yLmVyYXNlKCk7fX0sdGhpcyx0cnVlKTt9fWVsc2V7aWYodGhpcy5vTmF2aWdh dG9yKXt0aGlzLm9OYXZpZ2F0b3IuZGVzdHJveSgpO3RoaXMub05hdmlnYXRvcj1u dWxsO319fSxpbml0U3R5bGVzOmZ1bmN0aW9uKCl7dmFyIEc9Ri5fU1RZTEVTO3Ro aXMuU3R5bGU9e0NTU19ST1dfSEVBREVSOkcuQ1NTX1JPV19IRUFERVIsQ1NTX1JP V19GT09URVI6Ry5DU1NfUk9XX0ZPT1RFUixDU1NfQ0VMTDpHLkNTU19DRUxMLENT U19DRUxMX1NFTEVDVE9SOkcuQ1NTX0NFTExfU0VMRUNUT1IsQ1NTX0NFTExfU0VM RUNURUQ6Ry5DU1NfQ0VMTF9TRUxFQ1RFRCxDU1NfQ0VMTF9TRUxFQ1RBQkxFOkcu Q1NTX0NFTExfU0VMRUNUQUJMRSxDU1NfQ0VMTF9SRVNUUklDVEVEOkcuQ1NTX0NF TExfUkVTVFJJQ1RFRCxDU1NfQ0VMTF9UT0RBWTpHLkNTU19DRUxMX1RPREFZLENT U19DRUxMX09PTTpHLkNTU19DRUxMX09PTSxDU1NfQ0VMTF9PT0I6Ry5DU1NfQ0VM TF9PT0IsQ1NTX0hFQURFUjpHLkNTU19IRUFERVIsQ1NTX0hFQURFUl9URVhUOkcu Q1NTX0hFQURFUl9URVhULENTU19CT0RZOkcuQ1NTX0JPRFksQ1NTX1dFRUtEQVlf Q0VMTDpHLkNTU19XRUVLREFZX0NFTEwsQ1NTX1dFRUtEQVlfUk9XOkcuQ1NTX1dF RUtEQVlfUk9XLENTU19GT09URVI6Ry5DU1NfRk9PVEVSLENTU19DQUxFTkRBUjpH LkNTU19DQUxFTkRBUixDU1NfU0lOR0xFOkcuQ1NTX1NJTkdMRSxDU1NfQ09OVEFJ TkVSOkcuQ1NTX0NPTlRBSU5FUixDU1NfTkFWX0xFRlQ6Ry5DU1NfTkFWX0xFRlQs Q1NTX05BVl9SSUdIVDpHLkNTU19OQVZfUklHSFQsQ1NTX05BVjpHLkNTU19OQVYs Q1NTX0NMT1NFOkcuQ1NTX0NMT1NFLENTU19DRUxMX1RPUDpHLkNTU19DRUxMX1RP UCxDU1NfQ0VMTF9MRUZUOkcuQ1NTX0NFTExfTEVGVCxDU1NfQ0VMTF9SSUdIVDpH LkNTU19DRUxMX1JJR0hULENTU19DRUxMX0JPVFRPTTpHLkNTU19DRUxMX0JPVFRP TSxDU1NfQ0VMTF9IT1ZFUjpHLkNTU19DRUxMX0hPVkVSLENTU19DRUxMX0hJR0hM SUdIVDE6Ry5DU1NfQ0VMTF9ISUdITElHSFQxLENTU19DRUxMX0hJR0hMSUdIVDI6 Ry5DU1NfQ0VMTF9ISUdITElHSFQyLENTU19DRUxMX0hJR0hMSUdIVDM6Ry5DU1Nf Q0VMTF9ISUdITElHSFQzLENTU19DRUxMX0hJR0hMSUdIVDQ6Ry5DU1NfQ0VMTF9I SUdITElHSFQ0fTt9LGJ1aWxkTW9udGhMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0 aGlzLl9idWlsZE1vbnRoTGFiZWwodGhpcy5jZmcuZ2V0UHJvcGVydHkoQi5QQUdF REFURS5rZXkpKTt9LF9idWlsZE1vbnRoTGFiZWw6ZnVuY3Rpb24oRyl7dmFyIEk9 dGhpcy5Mb2NhbGUuTE9DQUxFX01PTlRIU1tHLmdldE1vbnRoKCldK3RoaXMuTG9j YWxlLk1ZX0xBQkVMX01PTlRIX1NVRkZJWCxIPUcuZ2V0RnVsbFllYXIoKSt0aGlz LkxvY2FsZS5NWV9MQUJFTF9ZRUFSX1NVRkZJWDtpZih0aGlzLkxvY2FsZS5NWV9M QUJFTF9NT05USF9QT1NJVElPTj09Mnx8dGhpcy5Mb2NhbGUuTVlfTEFCRUxfWUVB Ul9QT1NJVElPTj09MSl7cmV0dXJuIEgrSTt9ZWxzZXtyZXR1cm4gSStIO319LGJ1 aWxkRGF5TGFiZWw6ZnVuY3Rpb24oRyl7cmV0dXJuIEcuZ2V0RGF0ZSgpO30sY3Jl YXRlVGl0bGVCYXI6ZnVuY3Rpb24oRyl7dmFyIEg9Qy5nZXRFbGVtZW50c0J5Q2xh c3NOYW1lKFlBSE9PLndpZGdldC5DYWxlbmRhckdyb3VwLkNTU18yVVBUSVRMRSwi ZGl2Iix0aGlzLm9Eb21Db250YWluZXIpWzBdfHxkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCJkaXYiKTtILmNsYXNzTmFtZT1ZQUhPTy53aWRnZXQuQ2FsZW5kYXJHcm91 cC5DU1NfMlVQVElUTEU7SC5pbm5lckhUTUw9Rzt0aGlzLm9Eb21Db250YWluZXIu aW5zZXJ0QmVmb3JlKEgsdGhpcy5vRG9tQ29udGFpbmVyLmZpcnN0Q2hpbGQpO0Mu YWRkQ2xhc3ModGhpcy5vRG9tQ29udGFpbmVyLCJ3aXRodGl0bGUiKTtyZXR1cm4g SDt9LHJlbW92ZVRpdGxlQmFyOmZ1bmN0aW9uKCl7dmFyIEc9Qy5nZXRFbGVtZW50 c0J5Q2xhc3NOYW1lKFlBSE9PLndpZGdldC5DYWxlbmRhckdyb3VwLkNTU18yVVBU SVRMRSwiZGl2Iix0aGlzLm9Eb21Db250YWluZXIpWzBdfHxudWxsO2lmKEcpe0Eu cHVyZ2VFbGVtZW50KEcpO3RoaXMub0RvbUNvbnRhaW5lci5yZW1vdmVDaGlsZChH KTt9Qy5yZW1vdmVDbGFzcyh0aGlzLm9Eb21Db250YWluZXIsIndpdGh0aXRsZSIp O30sY3JlYXRlQ2xvc2VCdXR0b246ZnVuY3Rpb24oKXt2YXIgSj1ZQUhPTy53aWRn ZXQuQ2FsZW5kYXJHcm91cC5DU1NfMlVQQ0xPU0UsTD0idXMvbXkvYm4veF9kLmdp ZiIsSz1DLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImxpbmstY2xvc2UiLCJhIix0 aGlzLm9Eb21Db250YWluZXIpWzBdLEc9dGhpcy5jZmcuZ2V0UHJvcGVydHkoQi5T VFJJTkdTLmtleSksSD0oRyYmRy5jbG9zZSk/Ry5jbG9zZToiIjtpZighSyl7Sz1k b2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7QS5hZGRMaXN0ZW5lcihLLCJjbGlj ayIsZnVuY3Rpb24oTixNKXtNLmhpZGUoKTtBLnByZXZlbnREZWZhdWx0KE4pO30s dGhpcyk7fUsuaHJlZj0iIyI7Sy5jbGFzc05hbWU9ImxpbmstY2xvc2UiO2lmKEYu SU1HX1JPT1QhPT1udWxsKXt2YXIgST1DLmdldEVsZW1lbnRzQnlDbGFzc05hbWUo SiwiaW1nIixLKVswXXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7SS5z cmM9Ri5JTUdfUk9PVCtMO0kuY2xhc3NOYW1lPUo7Sy5hcHBlbmRDaGlsZChJKTt9 ZWxzZXtLLmlubmVySFRNTD0nPHNwYW4gY2xhc3M9IicrSisiICIrdGhpcy5TdHls ZS5DU1NfQ0xPU0UrJyI+JytIKyI8L3NwYW4+Ijt9dGhpcy5vRG9tQ29udGFpbmVy LmFwcGVuZENoaWxkKEspO3JldHVybiBLO30scmVtb3ZlQ2xvc2VCdXR0b246ZnVu Y3Rpb24oKXt2YXIgRz1DLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImxpbmstY2xv c2UiLCJhIix0aGlzLm9Eb21Db250YWluZXIpWzBdfHxudWxsO2lmKEcpe0EucHVy Z2VFbGVtZW50KEcpO3RoaXMub0RvbUNvbnRhaW5lci5yZW1vdmVDaGlsZChHKTt9 fSxyZW5kZXJIZWFkZXI6ZnVuY3Rpb24oUSl7dmFyIFA9NyxPPSJ1cy90ci9jYWxs dC5naWYiLEc9InVzL3RyL2NhbHJ0LmdpZiIsTj10aGlzLmNmZyxLPU4uZ2V0UHJv cGVydHkoQi5QQUdFREFURS5rZXkpLEw9Ti5nZXRQcm9wZXJ0eShCLlNUUklOR1Mu a2V5KSxWPShMJiZMLnByZXZpb3VzTW9udGgpP0wucHJldmlvdXNNb250aDoiIixI PShMJiZMLm5leHRNb250aCk/TC5uZXh0TW9udGg6IiIsTTtpZihOLmdldFByb3Bl cnR5KEIuU0hPV19XRUVLX0hFQURFUi5rZXkpKXtQKz0xO31pZihOLmdldFByb3Bl cnR5KEIuU0hPV19XRUVLX0ZPT1RFUi5rZXkpKXtQKz0xO31RW1EubGVuZ3RoXT0i PHRoZWFkPiI7UVtRLmxlbmd0aF09Ijx0cj4iO1FbUS5sZW5ndGhdPSc8dGggY29s c3Bhbj0iJytQKyciIGNsYXNzPSInK3RoaXMuU3R5bGUuQ1NTX0hFQURFUl9URVhU KyciPic7UVtRLmxlbmd0aF09JzxkaXYgY2xhc3M9IicrdGhpcy5TdHlsZS5DU1Nf SEVBREVSKyciPic7dmFyIFgsVT1mYWxzZTtpZih0aGlzLnBhcmVudCl7aWYodGhp cy5pbmRleD09PTApe1g9dHJ1ZTt9aWYodGhpcy5pbmRleD09KHRoaXMucGFyZW50 LmNmZy5nZXRQcm9wZXJ0eSgicGFnZXMiKS0xKSl7VT10cnVlO319ZWxzZXtYPXRy dWU7VT10cnVlO31pZihYKXtNPXRoaXMuX2J1aWxkTW9udGhMYWJlbChELnN1YnRy YWN0KEssRC5NT05USCwxKSk7dmFyIFI9Ti5nZXRQcm9wZXJ0eShCLk5BVl9BUlJP V19MRUZULmtleSk7aWYoUj09PW51bGwmJkYuSU1HX1JPT1QhPT1udWxsKXtSPUYu SU1HX1JPT1QrTzt9dmFyIEk9KFI9PT1udWxsKT8iIjonIHN0eWxlPSJiYWNrZ3Jv dW5kLWltYWdlOnVybCgnK1IrJykiJztRW1EubGVuZ3RoXT0nPGEgY2xhc3M9Iicr dGhpcy5TdHlsZS5DU1NfTkFWX0xFRlQrJyInK0krJyBocmVmPSIjIj4nK1YrIiAo IitNKyIpIisiPC9hPiI7fXZhciBXPXRoaXMuYnVpbGRNb250aExhYmVsKCk7dmFy IFM9dGhpcy5wYXJlbnR8fHRoaXM7aWYoUy5jZmcuZ2V0UHJvcGVydHkoIm5hdmln YXRvciIpKXtXPSc8YSBjbGFzcz0iJyt0aGlzLlN0eWxlLkNTU19OQVYrJyIgaHJl Zj0iIyI+JytXKyI8L2E+Ijt9UVtRLmxlbmd0aF09VztpZihVKXtNPXRoaXMuX2J1 aWxkTW9udGhMYWJlbChELmFkZChLLEQuTU9OVEgsMSkpO3ZhciBUPU4uZ2V0UHJv cGVydHkoQi5OQVZfQVJST1dfUklHSFQua2V5KTtpZihUPT09bnVsbCYmRi5JTUdf Uk9PVCE9PW51bGwpe1Q9Ri5JTUdfUk9PVCtHO312YXIgSj0oVD09PW51bGwpPyIi Oicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCcrVCsnKSInO1FbUS5sZW5n dGhdPSc8YSBjbGFzcz0iJyt0aGlzLlN0eWxlLkNTU19OQVZfUklHSFQrJyInK0or JyBocmVmPSIjIj4nK0grIiAoIitNKyIpIisiPC9hPiI7fVFbUS5sZW5ndGhdPSI8 L2Rpdj5cbjwvdGg+XG48L3RyPiI7aWYoTi5nZXRQcm9wZXJ0eShCLlNIT1dfV0VF S0RBWVMua2V5KSl7UT10aGlzLmJ1aWxkV2Vla2RheXMoUSk7fVFbUS5sZW5ndGhd PSI8L3RoZWFkPiI7cmV0dXJuIFE7fSxidWlsZFdlZWtkYXlzOmZ1bmN0aW9uKEgp e0hbSC5sZW5ndGhdPSc8dHIgY2xhc3M9IicrdGhpcy5TdHlsZS5DU1NfV0VFS0RB WV9ST1crJyI+JztpZih0aGlzLmNmZy5nZXRQcm9wZXJ0eShCLlNIT1dfV0VFS19I RUFERVIua2V5KSl7SFtILmxlbmd0aF09Ijx0aD4mIzE2MDs8L3RoPiI7fWZvcih2 YXIgRz0wO0c8dGhpcy5Mb2NhbGUuTE9DQUxFX1dFRUtEQVlTLmxlbmd0aDsrK0cp e0hbSC5sZW5ndGhdPSc8dGggY2xhc3M9ImNhbHdlZWtkYXljZWxsIj4nK3RoaXMu TG9jYWxlLkxPQ0FMRV9XRUVLREFZU1tHXSsiPC90aD4iO31pZih0aGlzLmNmZy5n ZXRQcm9wZXJ0eShCLlNIT1dfV0VFS19GT09URVIua2V5KSl7SFtILmxlbmd0aF09 Ijx0aD4mIzE2MDs8L3RoPiI7fUhbSC5sZW5ndGhdPSI8L3RyPiI7cmV0dXJuIEg7 fSxyZW5kZXJCb2R5OmZ1bmN0aW9uKGwsail7dmFyIEFKPXRoaXMuY2ZnLmdldFBy b3BlcnR5KEIuU1RBUlRfV0VFS0RBWS5rZXkpO3RoaXMucHJlTW9udGhEYXlzPWwu Z2V0RGF5KCk7aWYoQUo+MCl7dGhpcy5wcmVNb250aERheXMtPUFKO31pZih0aGlz LnByZU1vbnRoRGF5czwwKXt0aGlzLnByZU1vbnRoRGF5cys9Nzt9dGhpcy5tb250 aERheXM9RC5maW5kTW9udGhFbmQobCkuZ2V0RGF0ZSgpO3RoaXMucG9zdE1vbnRo RGF5cz1GLkRJU1BMQVlfREFZUy10aGlzLnByZU1vbnRoRGF5cy10aGlzLm1vbnRo RGF5cztsPUQuc3VidHJhY3QobCxELkRBWSx0aGlzLnByZU1vbnRoRGF5cyk7dmFy IFgsTixNPSJ3IixlPSJfY2VsbCIsYj0id2QiLHY9ImQiLFAscSxBQj10aGlzLnRv ZGF5LE89dGhpcy5jZmcsVj1BQi5nZXRGdWxsWWVhcigpLHU9QUIuZ2V0TW9udGgo KSxKPUFCLmdldERhdGUoKSxBQT1PLmdldFByb3BlcnR5KEIuUEFHRURBVEUua2V5 KSxJPU8uZ2V0UHJvcGVydHkoQi5ISURFX0JMQU5LX1dFRUtTLmtleSksaD1PLmdl dFByb3BlcnR5KEIuU0hPV19XRUVLX0ZPT1RFUi5rZXkpLGE9Ty5nZXRQcm9wZXJ0 eShCLlNIT1dfV0VFS19IRUFERVIua2V5KSxUPU8uZ2V0UHJvcGVydHkoQi5NSU5E QVRFLmtleSksWj1PLmdldFByb3BlcnR5KEIuTUFYREFURS5rZXkpO2lmKFQpe1Q9 RC5jbGVhclRpbWUoVCk7fWlmKFope1o9RC5jbGVhclRpbWUoWik7fWpbai5sZW5n dGhdPSc8dGJvZHkgY2xhc3M9Im0nKyhBQS5nZXRNb250aCgpKzEpKyIgIit0aGlz LlN0eWxlLkNTU19CT0RZKyciPic7dmFyIEFIPTAsUT1kb2N1bWVudC5jcmVhdGVF bGVtZW50KCJkaXYiKSxrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7US5h cHBlbmRDaGlsZChrKTt2YXIgej10aGlzLnBhcmVudHx8dGhpcztmb3IodmFyIEFE PTA7QUQ8NjtBRCsrKXtYPUQuZ2V0V2Vla051bWJlcihsLEFKKTtOPU0rWDtpZihB RCE9PTAmJkk9PT10cnVlJiZsLmdldE1vbnRoKCkhPUFBLmdldE1vbnRoKCkpe2Jy ZWFrO31lbHNle2pbai5sZW5ndGhdPSc8dHIgY2xhc3M9IicrTisnIj4nO2lmKGEp e2o9dGhpcy5yZW5kZXJSb3dIZWFkZXIoWCxqKTt9Zm9yKHZhciBBST0wO0FJPDc7 QUkrKyl7UD1bXTt0aGlzLmNsZWFyRWxlbWVudChrKTtrLmNsYXNzTmFtZT10aGlz LlN0eWxlLkNTU19DRUxMO2suaWQ9dGhpcy5pZCtlK0FIO2lmKGwuZ2V0RGF0ZSgp PT1KJiZsLmdldE1vbnRoKCk9PXUmJmwuZ2V0RnVsbFllYXIoKT09Vil7UFtQLmxl bmd0aF09ei5yZW5kZXJDZWxsU3R5bGVUb2RheTt9dmFyIFk9W2wuZ2V0RnVsbFll YXIoKSxsLmdldE1vbnRoKCkrMSxsLmdldERhdGUoKV07dGhpcy5jZWxsRGF0ZXNb dGhpcy5jZWxsRGF0ZXMubGVuZ3RoXT1ZO2lmKGwuZ2V0TW9udGgoKSE9QUEuZ2V0 TW9udGgoKSl7UFtQLmxlbmd0aF09ei5yZW5kZXJDZWxsTm90VGhpc01vbnRoO31l bHNle0MuYWRkQ2xhc3MoayxiK2wuZ2V0RGF5KCkpO0MuYWRkQ2xhc3Moayx2K2wu Z2V0RGF0ZSgpKTtmb3IodmFyIEFDPTA7QUM8dGhpcy5yZW5kZXJTdGFjay5sZW5n dGg7KytBQyl7cT1udWxsO3ZhciB3PXRoaXMucmVuZGVyU3RhY2tbQUNdLEFLPXdb MF0sSCxjLEw7c3dpdGNoKEFLKXtjYXNlIEYuREFURTpIPXdbMV1bMV07Yz13WzFd WzJdO0w9d1sxXVswXTtpZihsLmdldE1vbnRoKCkrMT09SCYmbC5nZXREYXRlKCk9 PWMmJmwuZ2V0RnVsbFllYXIoKT09TCl7cT13WzJdO3RoaXMucmVuZGVyU3RhY2su c3BsaWNlKEFDLDEpO31icmVhaztjYXNlIEYuTU9OVEhfREFZOkg9d1sxXVswXTtj PXdbMV1bMV07aWYobC5nZXRNb250aCgpKzE9PUgmJmwuZ2V0RGF0ZSgpPT1jKXtx PXdbMl07dGhpcy5yZW5kZXJTdGFjay5zcGxpY2UoQUMsMSk7fWJyZWFrO2Nhc2Ug Ri5SQU5HRTp2YXIgZz13WzFdWzBdLGY9d1sxXVsxXSxtPWdbMV0sUz1nWzJdLFc9 Z1swXSxBRz1ELmdldERhdGUoVyxtLTEsUyksSz1mWzFdLG89ZlsyXSxHPWZbMF0s QUY9RC5nZXREYXRlKEcsSy0xLG8pO2lmKGwuZ2V0VGltZSgpPj1BRy5nZXRUaW1l KCkmJmwuZ2V0VGltZSgpPD1BRi5nZXRUaW1lKCkpe3E9d1syXTtpZihsLmdldFRp bWUoKT09QUYuZ2V0VGltZSgpKXt0aGlzLnJlbmRlclN0YWNrLnNwbGljZShBQywx KTt9fWJyZWFrO2Nhc2UgRi5XRUVLREFZOnZhciBSPXdbMV1bMF07aWYobC5nZXRE YXkoKSsxPT1SKXtxPXdbMl07fWJyZWFrO2Nhc2UgRi5NT05USDpIPXdbMV1bMF07 aWYobC5nZXRNb250aCgpKzE9PUgpe3E9d1syXTt9YnJlYWs7fWlmKHEpe1BbUC5s ZW5ndGhdPXE7fX19aWYodGhpcy5faW5kZXhPZlNlbGVjdGVkRmllbGRBcnJheShZ KT4tMSl7UFtQLmxlbmd0aF09ei5yZW5kZXJDZWxsU3R5bGVTZWxlY3RlZDt9aWYo KFQmJihsLmdldFRpbWUoKTxULmdldFRpbWUoKSkpfHwoWiYmKGwuZ2V0VGltZSgp PlouZ2V0VGltZSgpKSkpe1BbUC5sZW5ndGhdPXoucmVuZGVyT3V0T2ZCb3VuZHNE YXRlO31lbHNle1BbUC5sZW5ndGhdPXouc3R5bGVDZWxsRGVmYXVsdDtQW1AubGVu Z3RoXT16LnJlbmRlckNlbGxEZWZhdWx0O31mb3IodmFyIHk9MDt5PFAubGVuZ3Ro OysreSl7aWYoUFt5XS5jYWxsKHosbCxrKT09Ri5TVE9QX1JFTkRFUil7YnJlYWs7 fX1sLnNldFRpbWUobC5nZXRUaW1lKCkrRC5PTkVfREFZX01TKTtsPUQuY2xlYXJU aW1lKGwpO2lmKEFIPj0wJiZBSDw9Nil7Qy5hZGRDbGFzcyhrLHRoaXMuU3R5bGUu Q1NTX0NFTExfVE9QKTt9aWYoKEFIJTcpPT09MCl7Qy5hZGRDbGFzcyhrLHRoaXMu U3R5bGUuQ1NTX0NFTExfTEVGVCk7fWlmKCgoQUgrMSklNyk9PT0wKXtDLmFkZENs YXNzKGssdGhpcy5TdHlsZS5DU1NfQ0VMTF9SSUdIVCk7fXZhciBuPXRoaXMucG9z dE1vbnRoRGF5cztpZihJJiZuPj03KXt2YXIgVT1NYXRoLmZsb29yKG4vNyk7Zm9y KHZhciBBRT0wO0FFPFU7KytBRSl7bi09Nzt9fWlmKEFIPj0oKHRoaXMucHJlTW9u dGhEYXlzK24rdGhpcy5tb250aERheXMpLTcpKXtDLmFkZENsYXNzKGssdGhpcy5T dHlsZS5DU1NfQ0VMTF9CT1RUT00pO31qW2oubGVuZ3RoXT1RLmlubmVySFRNTDtB SCsrO31pZihoKXtqPXRoaXMucmVuZGVyUm93Rm9vdGVyKFgsaik7fWpbai5sZW5n dGhdPSI8L3RyPiI7fX1qW2oubGVuZ3RoXT0iPC90Ym9keT4iO3JldHVybiBqO30s cmVuZGVyRm9vdGVyOmZ1bmN0aW9uKEcpe3JldHVybiBHO30scmVuZGVyOmZ1bmN0 aW9uKCl7dGhpcy5iZWZvcmVSZW5kZXJFdmVudC5maXJlKCk7dmFyIEg9RC5maW5k TW9udGhTdGFydCh0aGlzLmNmZy5nZXRQcm9wZXJ0eShCLlBBR0VEQVRFLmtleSkp O3RoaXMucmVzZXRSZW5kZXJlcnMoKTt0aGlzLmNlbGxEYXRlcy5sZW5ndGg9MDtB LnB1cmdlRWxlbWVudCh0aGlzLm9Eb21Db250YWluZXIsdHJ1ZSk7dmFyIEc9W107 R1tHLmxlbmd0aF09Jzx0YWJsZSBjZWxsU3BhY2luZz0iMCIgY2xhc3M9IicrdGhp cy5TdHlsZS5DU1NfQ0FMRU5EQVIrIiB5IitILmdldEZ1bGxZZWFyKCkrJyIgaWQ9 IicrdGhpcy5pZCsnIj4nO0c9dGhpcy5yZW5kZXJIZWFkZXIoRyk7Rz10aGlzLnJl bmRlckJvZHkoSCxHKTtHPXRoaXMucmVuZGVyRm9vdGVyKEcpO0dbRy5sZW5ndGhd PSI8L3RhYmxlPiI7dGhpcy5vRG9tQ29udGFpbmVyLmlubmVySFRNTD1HLmpvaW4o IlxuIik7dGhpcy5hcHBseUxpc3RlbmVycygpO3RoaXMuY2VsbHM9dGhpcy5vRG9t Q29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpO3RoaXMuY2ZnLnJl ZmlyZUV2ZW50KEIuVElUTEUua2V5KTt0aGlzLmNmZy5yZWZpcmVFdmVudChCLkNM T1NFLmtleSk7dGhpcy5jZmcucmVmaXJlRXZlbnQoQi5JRlJBTUUua2V5KTt0aGlz LnJlbmRlckV2ZW50LmZpcmUoKTt9LGFwcGx5TGlzdGVuZXJzOmZ1bmN0aW9uKCl7 dmFyIFA9dGhpcy5vRG9tQ29udGFpbmVyLEg9dGhpcy5wYXJlbnR8fHRoaXMsTD0i YSIsUz0iY2xpY2siO3ZhciBNPUMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlz LlN0eWxlLkNTU19OQVZfTEVGVCxMLFApLEk9Qy5nZXRFbGVtZW50c0J5Q2xhc3NO YW1lKHRoaXMuU3R5bGUuQ1NTX05BVl9SSUdIVCxMLFApO2lmKE0mJk0ubGVuZ3Ro PjApe3RoaXMubGlua0xlZnQ9TVswXTtBLmFkZExpc3RlbmVyKHRoaXMubGlua0xl ZnQsUyx0aGlzLmRvUHJldmlvdXNNb250aE5hdixILHRydWUpO31pZihJJiZJLmxl bmd0aD4wKXt0aGlzLmxpbmtSaWdodD1JWzBdO0EuYWRkTGlzdGVuZXIodGhpcy5s aW5rUmlnaHQsUyx0aGlzLmRvTmV4dE1vbnRoTmF2LEgsdHJ1ZSk7fWlmKEguY2Zn LmdldFByb3BlcnR5KCJuYXZpZ2F0b3IiKSE9PW51bGwpe3RoaXMuYXBwbHlOYXZM aXN0ZW5lcnMoKTt9aWYodGhpcy5kb21FdmVudE1hcCl7dmFyIEosRztmb3IodmFy IFIgaW4gdGhpcy5kb21FdmVudE1hcCl7aWYoRS5oYXNPd25Qcm9wZXJ0eSh0aGlz LmRvbUV2ZW50TWFwLFIpKXt2YXIgTj10aGlzLmRvbUV2ZW50TWFwW1JdO2lmKCEo TiBpbnN0YW5jZW9mIEFycmF5KSl7Tj1bTl07fWZvcih2YXIgSz0wO0s8Ti5sZW5n dGg7SysrKXt2YXIgUT1OW0tdO0c9Qy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFIs US50YWcsdGhpcy5vRG9tQ29udGFpbmVyKTtmb3IodmFyIE89MDtPPEcubGVuZ3Ro O08rKyl7Sj1HW09dO0EuYWRkTGlzdGVuZXIoSixRLmV2ZW50LFEuaGFuZGxlcixR LnNjb3BlLFEuY29ycmVjdCk7fX19fX1BLmFkZExpc3RlbmVyKHRoaXMub0RvbUNv bnRhaW5lciwiY2xpY2siLHRoaXMuZG9TZWxlY3RDZWxsLHRoaXMpO0EuYWRkTGlz dGVuZXIodGhpcy5vRG9tQ29udGFpbmVyLCJtb3VzZW92ZXIiLHRoaXMuZG9DZWxs TW91c2VPdmVyLHRoaXMpO0EuYWRkTGlzdGVuZXIodGhpcy5vRG9tQ29udGFpbmVy LCJtb3VzZW91dCIsdGhpcy5kb0NlbGxNb3VzZU91dCx0aGlzKTt9LGFwcGx5TmF2 TGlzdGVuZXJzOmZ1bmN0aW9uKCl7dmFyIEg9dGhpcy5wYXJlbnR8fHRoaXMsST10 aGlzLEc9Qy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuU3R5bGUuQ1NTX05B ViwiYSIsdGhpcy5vRG9tQ29udGFpbmVyKTtpZihHLmxlbmd0aD4wKXtBLmFkZExp c3RlbmVyKEcsImNsaWNrIixmdW5jdGlvbihOLE0pe3ZhciBMPUEuZ2V0VGFyZ2V0 KE4pO2lmKHRoaXM9PT1MfHxDLmlzQW5jZXN0b3IodGhpcyxMKSl7QS5wcmV2ZW50 RGVmYXVsdChOKTt9dmFyIEo9SC5vTmF2aWdhdG9yO2lmKEope3ZhciBLPUkuY2Zn LmdldFByb3BlcnR5KCJwYWdlZGF0ZSIpO0ouc2V0WWVhcihLLmdldEZ1bGxZZWFy KCkpO0ouc2V0TW9udGgoSy5nZXRNb250aCgpKTtKLnNob3coKTt9fSk7fX0sZ2V0 RGF0ZUJ5Q2VsbElkOmZ1bmN0aW9uKEgpe3ZhciBHPXRoaXMuZ2V0RGF0ZUZpZWxk c0J5Q2VsbElkKEgpO3JldHVybihHKT9ELmdldERhdGUoR1swXSxHWzFdLTEsR1sy XSk6bnVsbDt9LGdldERhdGVGaWVsZHNCeUNlbGxJZDpmdW5jdGlvbihHKXtHPXRo aXMuZ2V0SW5kZXhGcm9tSWQoRyk7cmV0dXJuKEc+LTEpP3RoaXMuY2VsbERhdGVz W0ddOm51bGw7fSxnZXRDZWxsSW5kZXg6ZnVuY3Rpb24oSSl7dmFyIEg9LTE7aWYo SSl7dmFyIEc9SS5nZXRNb250aCgpLE49SS5nZXRGdWxsWWVhcigpLE09SS5nZXRE YXRlKCksSz10aGlzLmNlbGxEYXRlcztmb3IodmFyIEo9MDtKPEsubGVuZ3RoOysr Sil7dmFyIEw9S1tKXTtpZihMWzBdPT09TiYmTFsxXT09PUcrMSYmTFsyXT09PU0p e0g9SjticmVhazt9fX1yZXR1cm4gSDt9LGdldEluZGV4RnJvbUlkOmZ1bmN0aW9u KEkpe3ZhciBIPS0xLEc9SS5sYXN0SW5kZXhPZigiX2NlbGwiKTtpZihHPi0xKXtI PXBhcnNlSW50KEkuc3Vic3RyaW5nKEcrNSksMTApO31yZXR1cm4gSDt9LHJlbmRl ck91dE9mQm91bmRzRGF0ZTpmdW5jdGlvbihILEcpe0MuYWRkQ2xhc3MoRyx0aGlz LlN0eWxlLkNTU19DRUxMX09PQik7Ry5pbm5lckhUTUw9SC5nZXREYXRlKCk7cmV0 dXJuIEYuU1RPUF9SRU5ERVI7fSxyZW5kZXJSb3dIZWFkZXI6ZnVuY3Rpb24oSCxH KXtHW0cubGVuZ3RoXT0nPHRoIGNsYXNzPSJjYWxyb3doZWFkIj4nK0grIjwvdGg+ IjtyZXR1cm4gRzt9LHJlbmRlclJvd0Zvb3RlcjpmdW5jdGlvbihILEcpe0dbRy5s ZW5ndGhdPSc8dGggY2xhc3M9ImNhbHJvd2Zvb3QiPicrSCsiPC90aD4iO3JldHVy biBHO30scmVuZGVyQ2VsbERlZmF1bHQ6ZnVuY3Rpb24oSCxHKXtHLmlubmVySFRN TD0nPGEgaHJlZj0iIyIgY2xhc3M9IicrdGhpcy5TdHlsZS5DU1NfQ0VMTF9TRUxF Q1RPUisnIj4nK3RoaXMuYnVpbGREYXlMYWJlbChIKSsiPC9hPiI7fSxzdHlsZUNl bGxEZWZhdWx0OmZ1bmN0aW9uKEgsRyl7Qy5hZGRDbGFzcyhHLHRoaXMuU3R5bGUu Q1NTX0NFTExfU0VMRUNUQUJMRSk7fSxyZW5kZXJDZWxsU3R5bGVIaWdobGlnaHQx OmZ1bmN0aW9uKEgsRyl7Qy5hZGRDbGFzcyhHLHRoaXMuU3R5bGUuQ1NTX0NFTExf SElHSExJR0hUMSk7fSxyZW5kZXJDZWxsU3R5bGVIaWdobGlnaHQyOmZ1bmN0aW9u KEgsRyl7Qy5hZGRDbGFzcyhHLHRoaXMuU3R5bGUuQ1NTX0NFTExfSElHSExJR0hU Mik7fSxyZW5kZXJDZWxsU3R5bGVIaWdobGlnaHQzOmZ1bmN0aW9uKEgsRyl7Qy5h ZGRDbGFzcyhHLHRoaXMuU3R5bGUuQ1NTX0NFTExfSElHSExJR0hUMyk7fSxyZW5k ZXJDZWxsU3R5bGVIaWdobGlnaHQ0OmZ1bmN0aW9uKEgsRyl7Qy5hZGRDbGFzcyhH LHRoaXMuU3R5bGUuQ1NTX0NFTExfSElHSExJR0hUNCk7fSxyZW5kZXJDZWxsU3R5 bGVUb2RheTpmdW5jdGlvbihILEcpe0MuYWRkQ2xhc3MoRyx0aGlzLlN0eWxlLkNT U19DRUxMX1RPREFZKTt9LHJlbmRlckNlbGxTdHlsZVNlbGVjdGVkOmZ1bmN0aW9u KEgsRyl7Qy5hZGRDbGFzcyhHLHRoaXMuU3R5bGUuQ1NTX0NFTExfU0VMRUNURUQp O30scmVuZGVyQ2VsbE5vdFRoaXNNb250aDpmdW5jdGlvbihILEcpe0MuYWRkQ2xh c3MoRyx0aGlzLlN0eWxlLkNTU19DRUxMX09PTSk7Ry5pbm5lckhUTUw9SC5nZXRE YXRlKCk7cmV0dXJuIEYuU1RPUF9SRU5ERVI7fSxyZW5kZXJCb2R5Q2VsbFJlc3Ry aWN0ZWQ6ZnVuY3Rpb24oSCxHKXtDLmFkZENsYXNzKEcsdGhpcy5TdHlsZS5DU1Nf Q0VMTCk7Qy5hZGRDbGFzcyhHLHRoaXMuU3R5bGUuQ1NTX0NFTExfUkVTVFJJQ1RF RCk7Ry5pbm5lckhUTUw9SC5nZXREYXRlKCk7cmV0dXJuIEYuU1RPUF9SRU5ERVI7 fSxhZGRNb250aHM6ZnVuY3Rpb24oSCl7dmFyIEc9Qi5QQUdFREFURS5rZXk7dGhp cy5jZmcuc2V0UHJvcGVydHkoRyxELmFkZCh0aGlzLmNmZy5nZXRQcm9wZXJ0eShH KSxELk1PTlRILEgpKTt0aGlzLnJlc2V0UmVuZGVyZXJzKCk7dGhpcy5jaGFuZ2VQ YWdlRXZlbnQuZmlyZSgpO30sc3VidHJhY3RNb250aHM6ZnVuY3Rpb24oSCl7dmFy IEc9Qi5QQUdFREFURS5rZXk7dGhpcy5jZmcuc2V0UHJvcGVydHkoRyxELnN1YnRy YWN0KHRoaXMuY2ZnLmdldFByb3BlcnR5KEcpLEQuTU9OVEgsSCkpO3RoaXMucmVz ZXRSZW5kZXJlcnMoKTt0aGlzLmNoYW5nZVBhZ2VFdmVudC5maXJlKCk7fSxhZGRZ ZWFyczpmdW5jdGlvbihIKXt2YXIgRz1CLlBBR0VEQVRFLmtleTt0aGlzLmNmZy5z ZXRQcm9wZXJ0eShHLEQuYWRkKHRoaXMuY2ZnLmdldFByb3BlcnR5KEcpLEQuWUVB UixIKSk7dGhpcy5yZXNldFJlbmRlcmVycygpO3RoaXMuY2hhbmdlUGFnZUV2ZW50 LmZpcmUoKTt9LHN1YnRyYWN0WWVhcnM6ZnVuY3Rpb24oSCl7dmFyIEc9Qi5QQUdF REFURS5rZXk7dGhpcy5jZmcuc2V0UHJvcGVydHkoRyxELnN1YnRyYWN0KHRoaXMu Y2ZnLmdldFByb3BlcnR5KEcpLEQuWUVBUixIKSk7dGhpcy5yZXNldFJlbmRlcmVy cygpO3RoaXMuY2hhbmdlUGFnZUV2ZW50LmZpcmUoKTt9LG5leHRNb250aDpmdW5j dGlvbigpe3RoaXMuYWRkTW9udGhzKDEpO30scHJldmlvdXNNb250aDpmdW5jdGlv bigpe3RoaXMuc3VidHJhY3RNb250aHMoMSk7fSxuZXh0WWVhcjpmdW5jdGlvbigp e3RoaXMuYWRkWWVhcnMoMSk7fSxwcmV2aW91c1llYXI6ZnVuY3Rpb24oKXt0aGlz LnN1YnRyYWN0WWVhcnMoMSk7fSxyZXNldDpmdW5jdGlvbigpe3RoaXMuY2ZnLnJl c2V0UHJvcGVydHkoQi5TRUxFQ1RFRC5rZXkpO3RoaXMuY2ZnLnJlc2V0UHJvcGVy dHkoQi5QQUdFREFURS5rZXkpO3RoaXMucmVzZXRFdmVudC5maXJlKCk7fSxjbGVh cjpmdW5jdGlvbigpe3RoaXMuY2ZnLnNldFByb3BlcnR5KEIuU0VMRUNURUQua2V5 LFtdKTt0aGlzLmNmZy5zZXRQcm9wZXJ0eShCLlBBR0VEQVRFLmtleSxuZXcgRGF0 ZSh0aGlzLnRvZGF5LmdldFRpbWUoKSkpO3RoaXMuY2xlYXJFdmVudC5maXJlKCk7 fSxzZWxlY3Q6ZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5fdG9GaWVsZEFycmF5KEkp LEg9W10sSz1bXSxNPUIuU0VMRUNURUQua2V5O2Zvcih2YXIgRz0wO0c8TC5sZW5n dGg7KytHKXt2YXIgSj1MW0ddO2lmKCF0aGlzLmlzRGF0ZU9PQih0aGlzLl90b0Rh dGUoSikpKXtpZihILmxlbmd0aD09PTApe3RoaXMuYmVmb3JlU2VsZWN0RXZlbnQu ZmlyZSgpO0s9dGhpcy5jZmcuZ2V0UHJvcGVydHkoTSk7fUgucHVzaChKKTtpZih0 aGlzLl9pbmRleE9mU2VsZWN0ZWRGaWVsZEFycmF5KEopPT0tMSl7S1tLLmxlbmd0 aF09Sjt9fX1pZihILmxlbmd0aD4wKXtpZih0aGlzLnBhcmVudCl7dGhpcy5wYXJl bnQuY2ZnLnNldFByb3BlcnR5KE0sSyk7fWVsc2V7dGhpcy5jZmcuc2V0UHJvcGVy dHkoTSxLKTt9dGhpcy5zZWxlY3RFdmVudC5maXJlKEgpO31yZXR1cm4gdGhpcy5n ZXRTZWxlY3RlZERhdGVzKCk7fSxzZWxlY3RDZWxsOmZ1bmN0aW9uKEope3ZhciBI PXRoaXMuY2VsbHNbSl0sTj10aGlzLmNlbGxEYXRlc1tKXSxNPXRoaXMuX3RvRGF0 ZShOKSxJPUMuaGFzQ2xhc3MoSCx0aGlzLlN0eWxlLkNTU19DRUxMX1NFTEVDVEFC TEUpO2lmKEkpe3RoaXMuYmVmb3JlU2VsZWN0RXZlbnQuZmlyZSgpO3ZhciBMPUIu U0VMRUNURUQua2V5O3ZhciBLPXRoaXMuY2ZnLmdldFByb3BlcnR5KEwpO3ZhciBH PU4uY29uY2F0KCk7aWYodGhpcy5faW5kZXhPZlNlbGVjdGVkRmllbGRBcnJheShH KT09LTEpe0tbSy5sZW5ndGhdPUc7fWlmKHRoaXMucGFyZW50KXt0aGlzLnBhcmVu dC5jZmcuc2V0UHJvcGVydHkoTCxLKTt9ZWxzZXt0aGlzLmNmZy5zZXRQcm9wZXJ0 eShMLEspO310aGlzLnJlbmRlckNlbGxTdHlsZVNlbGVjdGVkKE0sSCk7dGhpcy5z ZWxlY3RFdmVudC5maXJlKFtHXSk7dGhpcy5kb0NlbGxNb3VzZU91dC5jYWxsKEgs bnVsbCx0aGlzKTt9cmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWREYXRlcygpO30sZGVz ZWxlY3Q6ZnVuY3Rpb24oSyl7dmFyIEc9dGhpcy5fdG9GaWVsZEFycmF5KEspLEo9 W10sTT1bXSxOPUIuU0VMRUNURUQua2V5O2Zvcih2YXIgSD0wO0g8Ry5sZW5ndGg7 KytIKXt2YXIgTD1HW0hdO2lmKCF0aGlzLmlzRGF0ZU9PQih0aGlzLl90b0RhdGUo TCkpKXtpZihKLmxlbmd0aD09PTApe3RoaXMuYmVmb3JlRGVzZWxlY3RFdmVudC5m aXJlKCk7TT10aGlzLmNmZy5nZXRQcm9wZXJ0eShOKTt9Si5wdXNoKEwpO3ZhciBJ PXRoaXMuX2luZGV4T2ZTZWxlY3RlZEZpZWxkQXJyYXkoTCk7aWYoSSE9LTEpe00u c3BsaWNlKEksMSk7fX19aWYoSi5sZW5ndGg+MCl7aWYodGhpcy5wYXJlbnQpe3Ro aXMucGFyZW50LmNmZy5zZXRQcm9wZXJ0eShOLE0pO31lbHNle3RoaXMuY2ZnLnNl dFByb3BlcnR5KE4sTSk7fXRoaXMuZGVzZWxlY3RFdmVudC5maXJlKEopO31yZXR1 cm4gdGhpcy5nZXRTZWxlY3RlZERhdGVzKCk7fSxkZXNlbGVjdENlbGw6ZnVuY3Rp b24oSyl7dmFyIEg9dGhpcy5jZWxsc1tLXSxOPXRoaXMuY2VsbERhdGVzW0tdLEk9 dGhpcy5faW5kZXhPZlNlbGVjdGVkRmllbGRBcnJheShOKTt2YXIgSj1DLmhhc0Ns YXNzKEgsdGhpcy5TdHlsZS5DU1NfQ0VMTF9TRUxFQ1RBQkxFKTtpZihKKXt0aGlz LmJlZm9yZURlc2VsZWN0RXZlbnQuZmlyZSgpO3ZhciBMPXRoaXMuY2ZnLmdldFBy b3BlcnR5KEIuU0VMRUNURUQua2V5KSxNPXRoaXMuX3RvRGF0ZShOKSxHPU4uY29u Y2F0KCk7aWYoST4tMSl7aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoQi5QQUdFREFU RS5rZXkpLmdldE1vbnRoKCk9PU0uZ2V0TW9udGgoKSYmdGhpcy5jZmcuZ2V0UHJv cGVydHkoQi5QQUdFREFURS5rZXkpLmdldEZ1bGxZZWFyKCk9PU0uZ2V0RnVsbFll YXIoKSl7Qy5yZW1vdmVDbGFzcyhILHRoaXMuU3R5bGUuQ1NTX0NFTExfU0VMRUNU RUQpO31MLnNwbGljZShJLDEpO31pZih0aGlzLnBhcmVudCl7dGhpcy5wYXJlbnQu Y2ZnLnNldFByb3BlcnR5KEIuU0VMRUNURUQua2V5LEwpO31lbHNle3RoaXMuY2Zn LnNldFByb3BlcnR5KEIuU0VMRUNURUQua2V5LEwpO310aGlzLmRlc2VsZWN0RXZl bnQuZmlyZShbR10pO31yZXR1cm4gdGhpcy5nZXRTZWxlY3RlZERhdGVzKCk7fSxk ZXNlbGVjdEFsbDpmdW5jdGlvbigpe3RoaXMuYmVmb3JlRGVzZWxlY3RFdmVudC5m aXJlKCk7dmFyIEo9Qi5TRUxFQ1RFRC5rZXksRz10aGlzLmNmZy5nZXRQcm9wZXJ0 eShKKSxIPUcubGVuZ3RoLEk9Ry5jb25jYXQoKTtpZih0aGlzLnBhcmVudCl7dGhp cy5wYXJlbnQuY2ZnLnNldFByb3BlcnR5KEosW10pO31lbHNle3RoaXMuY2ZnLnNl dFByb3BlcnR5KEosW10pO31pZihIPjApe3RoaXMuZGVzZWxlY3RFdmVudC5maXJl KEkpO31yZXR1cm4gdGhpcy5nZXRTZWxlY3RlZERhdGVzKCk7fSxfdG9GaWVsZEFy cmF5OmZ1bmN0aW9uKEgpe3ZhciBHPVtdO2lmKEggaW5zdGFuY2VvZiBEYXRlKXtH PVtbSC5nZXRGdWxsWWVhcigpLEguZ2V0TW9udGgoKSsxLEguZ2V0RGF0ZSgpXV07 fWVsc2V7aWYoRS5pc1N0cmluZyhIKSl7Rz10aGlzLl9wYXJzZURhdGVzKEgpO31l bHNle2lmKEUuaXNBcnJheShIKSl7Zm9yKHZhciBJPTA7STxILmxlbmd0aDsrK0kp e3ZhciBKPUhbSV07R1tHLmxlbmd0aF09W0ouZ2V0RnVsbFllYXIoKSxKLmdldE1v bnRoKCkrMSxKLmdldERhdGUoKV07fX19fXJldHVybiBHO30sdG9EYXRlOmZ1bmN0 aW9uKEcpe3JldHVybiB0aGlzLl90b0RhdGUoRyk7fSxfdG9EYXRlOmZ1bmN0aW9u KEcpe2lmKEcgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gRzt9ZWxzZXtyZXR1cm4g RC5nZXREYXRlKEdbMF0sR1sxXS0xLEdbMl0pO319LF9maWVsZEFycmF5c0FyZUVx dWFsOmZ1bmN0aW9uKEksSCl7dmFyIEc9ZmFsc2U7aWYoSVswXT09SFswXSYmSVsx XT09SFsxXSYmSVsyXT09SFsyXSl7Rz10cnVlO31yZXR1cm4gRzt9LF9pbmRleE9m U2VsZWN0ZWRGaWVsZEFycmF5OmZ1bmN0aW9uKEspe3ZhciBKPS0xLEc9dGhpcy5j ZmcuZ2V0UHJvcGVydHkoQi5TRUxFQ1RFRC5rZXkpO2Zvcih2YXIgST0wO0k8Ry5s ZW5ndGg7KytJKXt2YXIgSD1HW0ldO2lmKEtbMF09PUhbMF0mJktbMV09PUhbMV0m JktbMl09PUhbMl0pe0o9STticmVhazt9fXJldHVybiBKO30saXNEYXRlT09NOmZ1 bmN0aW9uKEcpe3JldHVybihHLmdldE1vbnRoKCkhPXRoaXMuY2ZnLmdldFByb3Bl cnR5KEIuUEFHRURBVEUua2V5KS5nZXRNb250aCgpKTt9LGlzRGF0ZU9PQjpmdW5j dGlvbihJKXt2YXIgSj10aGlzLmNmZy5nZXRQcm9wZXJ0eShCLk1JTkRBVEUua2V5 KSxLPXRoaXMuY2ZnLmdldFByb3BlcnR5KEIuTUFYREFURS5rZXkpLEg9RDtpZihK KXtKPUguY2xlYXJUaW1lKEopO31pZihLKXtLPUguY2xlYXJUaW1lKEspO312YXIg Rz1uZXcgRGF0ZShJLmdldFRpbWUoKSk7Rz1ILmNsZWFyVGltZShHKTtyZXR1cm4o KEomJkcuZ2V0VGltZSgpPEouZ2V0VGltZSgpKXx8KEsmJkcuZ2V0VGltZSgpPksu Z2V0VGltZSgpKSk7fSxfcGFyc2VQYWdlRGF0ZTpmdW5jdGlvbihHKXt2YXIgSjtp ZihHKXtpZihHIGluc3RhbmNlb2YgRGF0ZSl7Sj1ELmZpbmRNb250aFN0YXJ0KEcp O31lbHNle3ZhciBLLEksSDtIPUcuc3BsaXQodGhpcy5jZmcuZ2V0UHJvcGVydHko Qi5EQVRFX0ZJRUxEX0RFTElNSVRFUi5rZXkpKTtLPXBhcnNlSW50KEhbdGhpcy5j ZmcuZ2V0UHJvcGVydHkoQi5NWV9NT05USF9QT1NJVElPTi5rZXkpLTFdLDEwKS0x O0k9cGFyc2VJbnQoSFt0aGlzLmNmZy5nZXRQcm9wZXJ0eShCLk1ZX1lFQVJfUE9T SVRJT04ua2V5KS0xXSwxMCk7Sj1ELmdldERhdGUoSSxLLDEpO319ZWxzZXtKPUQu Z2V0RGF0ZSh0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksdGhpcy50b2RheS5nZXRN b250aCgpLDEpO31yZXR1cm4gSjt9LG9uQmVmb3JlU2VsZWN0OmZ1bmN0aW9uKCl7 aWYodGhpcy5jZmcuZ2V0UHJvcGVydHkoQi5NVUxUSV9TRUxFQ1Qua2V5KT09PWZh bHNlKXtpZih0aGlzLnBhcmVudCl7dGhpcy5wYXJlbnQuY2FsbENoaWxkRnVuY3Rp b24oImNsZWFyQWxsQm9keUNlbGxTdHlsZXMiLHRoaXMuU3R5bGUuQ1NTX0NFTExf U0VMRUNURUQpO3RoaXMucGFyZW50LmRlc2VsZWN0QWxsKCk7fWVsc2V7dGhpcy5j bGVhckFsbEJvZHlDZWxsU3R5bGVzKHRoaXMuU3R5bGUuQ1NTX0NFTExfU0VMRUNU RUQpO3RoaXMuZGVzZWxlY3RBbGwoKTt9fX0sb25TZWxlY3Q6ZnVuY3Rpb24oRyl7 fSxvbkJlZm9yZURlc2VsZWN0OmZ1bmN0aW9uKCl7fSxvbkRlc2VsZWN0OmZ1bmN0 aW9uKEcpe30sb25DaGFuZ2VQYWdlOmZ1bmN0aW9uKCl7dGhpcy5yZW5kZXIoKTt9 LG9uUmVuZGVyOmZ1bmN0aW9uKCl7fSxvblJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5y ZW5kZXIoKTt9LG9uQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpO30sdmFs aWRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9LF9wYXJzZURhdGU6ZnVuY3Rp b24oSSl7dmFyIEo9SS5zcGxpdCh0aGlzLkxvY2FsZS5EQVRFX0ZJRUxEX0RFTElN SVRFUiksRztpZihKLmxlbmd0aD09Mil7Rz1bSlt0aGlzLkxvY2FsZS5NRF9NT05U SF9QT1NJVElPTi0xXSxKW3RoaXMuTG9jYWxlLk1EX0RBWV9QT1NJVElPTi0xXV07 Ry50eXBlPUYuTU9OVEhfREFZO31lbHNle0c9W0pbdGhpcy5Mb2NhbGUuTURZX1lF QVJfUE9TSVRJT04tMV0sSlt0aGlzLkxvY2FsZS5NRFlfTU9OVEhfUE9TSVRJT04t MV0sSlt0aGlzLkxvY2FsZS5NRFlfREFZX1BPU0lUSU9OLTFdXTtHLnR5cGU9Ri5E QVRFO31mb3IodmFyIEg9MDtIPEcubGVuZ3RoO0grKyl7R1tIXT1wYXJzZUludChH W0hdLDEwKTt9cmV0dXJuIEc7fSxfcGFyc2VEYXRlczpmdW5jdGlvbihIKXt2YXIg Tz1bXSxOPUguc3BsaXQodGhpcy5Mb2NhbGUuREFURV9ERUxJTUlURVIpO2Zvcih2 YXIgTT0wO008Ti5sZW5ndGg7KytNKXt2YXIgTD1OW01dO2lmKEwuaW5kZXhPZih0 aGlzLkxvY2FsZS5EQVRFX1JBTkdFX0RFTElNSVRFUikhPS0xKXt2YXIgRz1MLnNw bGl0KHRoaXMuTG9jYWxlLkRBVEVfUkFOR0VfREVMSU1JVEVSKSxLPXRoaXMuX3Bh cnNlRGF0ZShHWzBdKSxQPXRoaXMuX3BhcnNlRGF0ZShHWzFdKSxKPXRoaXMuX3Bh cnNlUmFuZ2UoSyxQKTtPPU8uY29uY2F0KEopO31lbHNle3ZhciBJPXRoaXMuX3Bh cnNlRGF0ZShMKTtPLnB1c2goSSk7fX1yZXR1cm4gTzt9LF9wYXJzZVJhbmdlOmZ1 bmN0aW9uKEcsSyl7dmFyIEg9RC5hZGQoRC5nZXREYXRlKEdbMF0sR1sxXS0xLEdb Ml0pLEQuREFZLDEpLEo9RC5nZXREYXRlKEtbMF0sS1sxXS0xLEtbMl0pLEk9W107 SS5wdXNoKEcpO3doaWxlKEguZ2V0VGltZSgpPD1KLmdldFRpbWUoKSl7SS5wdXNo KFtILmdldEZ1bGxZZWFyKCksSC5nZXRNb250aCgpKzEsSC5nZXREYXRlKCldKTtI PUQuYWRkKEgsRC5EQVksMSk7fXJldHVybiBJO30scmVzZXRSZW5kZXJlcnM6ZnVu Y3Rpb24oKXt0aGlzLnJlbmRlclN0YWNrPXRoaXMuX3JlbmRlclN0YWNrLmNvbmNh dCgpO30scmVtb3ZlUmVuZGVyZXJzOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyU3Rh Y2s9W107dGhpcy5yZW5kZXJTdGFjaz1bXTt9LGNsZWFyRWxlbWVudDpmdW5jdGlv bihHKXtHLmlubmVySFRNTD0iJiMxNjA7IjtHLmNsYXNzTmFtZT0iIjt9LGFkZFJl bmRlcmVyOmZ1bmN0aW9uKEcsSCl7dmFyIEo9dGhpcy5fcGFyc2VEYXRlcyhHKTtm b3IodmFyIEk9MDtJPEoubGVuZ3RoOysrSSl7dmFyIEs9SltJXTtpZihLLmxlbmd0 aD09Mil7aWYoS1swXWluc3RhbmNlb2YgQXJyYXkpe3RoaXMuX2FkZFJlbmRlcmVy KEYuUkFOR0UsSyxIKTt9ZWxzZXt0aGlzLl9hZGRSZW5kZXJlcihGLk1PTlRIX0RB WSxLLEgpO319ZWxzZXtpZihLLmxlbmd0aD09Myl7dGhpcy5fYWRkUmVuZGVyZXIo Ri5EQVRFLEssSCk7fX19fSxfYWRkUmVuZGVyZXI6ZnVuY3Rpb24oSCxJLEcpe3Zh ciBKPVtILEksR107dGhpcy5yZW5kZXJTdGFjay51bnNoaWZ0KEopO3RoaXMuX3Jl bmRlclN0YWNrPXRoaXMucmVuZGVyU3RhY2suY29uY2F0KCk7fSxhZGRNb250aFJl bmRlcmVyOmZ1bmN0aW9uKEgsRyl7dGhpcy5fYWRkUmVuZGVyZXIoRi5NT05USCxb SF0sRyk7fSxhZGRXZWVrZGF5UmVuZGVyZXI6ZnVuY3Rpb24oSCxHKXt0aGlzLl9h ZGRSZW5kZXJlcihGLldFRUtEQVksW0hdLEcpO30sY2xlYXJBbGxCb2R5Q2VsbFN0 eWxlczpmdW5jdGlvbihHKXtmb3IodmFyIEg9MDtIPHRoaXMuY2VsbHMubGVuZ3Ro OysrSCl7Qy5yZW1vdmVDbGFzcyh0aGlzLmNlbGxzW0hdLEcpO319LHNldE1vbnRo OmZ1bmN0aW9uKEkpe3ZhciBHPUIuUEFHRURBVEUua2V5LEg9dGhpcy5jZmcuZ2V0 UHJvcGVydHkoRyk7SC5zZXRNb250aChwYXJzZUludChJLDEwKSk7dGhpcy5jZmcu c2V0UHJvcGVydHkoRyxIKTt9LHNldFllYXI6ZnVuY3Rpb24oSCl7dmFyIEc9Qi5Q QUdFREFURS5rZXksST10aGlzLmNmZy5nZXRQcm9wZXJ0eShHKTtJLnNldEZ1bGxZ ZWFyKHBhcnNlSW50KEgsMTApKTt0aGlzLmNmZy5zZXRQcm9wZXJ0eShHLEkpO30s Z2V0U2VsZWN0ZWREYXRlczpmdW5jdGlvbigpe3ZhciBJPVtdLEg9dGhpcy5jZmcu Z2V0UHJvcGVydHkoQi5TRUxFQ1RFRC5rZXkpO2Zvcih2YXIgSz0wO0s8SC5sZW5n dGg7KytLKXt2YXIgSj1IW0tdO3ZhciBHPUQuZ2V0RGF0ZShKWzBdLEpbMV0tMSxK WzJdKTtJLnB1c2goRyk7fUkuc29ydChmdW5jdGlvbihNLEwpe3JldHVybiBNLUw7 fSk7cmV0dXJuIEk7fSxoaWRlOmZ1bmN0aW9uKCl7aWYodGhpcy5iZWZvcmVIaWRl RXZlbnQuZmlyZSgpKXt0aGlzLm9Eb21Db250YWluZXIuc3R5bGUuZGlzcGxheT0i bm9uZSI7dGhpcy5oaWRlRXZlbnQuZmlyZSgpO319LHNob3c6ZnVuY3Rpb24oKXtp Zih0aGlzLmJlZm9yZVNob3dFdmVudC5maXJlKCkpe3RoaXMub0RvbUNvbnRhaW5l ci5zdHlsZS5kaXNwbGF5PSJibG9jayI7dGhpcy5zaG93RXZlbnQuZmlyZSgpO319 LGJyb3dzZXI6KGZ1bmN0aW9uKCl7dmFyIEc9bmF2aWdhdG9yLnVzZXJBZ2VudC50 b0xvd2VyQ2FzZSgpO2lmKEcuaW5kZXhPZigib3BlcmEiKSE9LTEpe3JldHVybiJv cGVyYSI7fWVsc2V7aWYoRy5pbmRleE9mKCJtc2llIDciKSE9LTEpe3JldHVybiJp ZTciO31lbHNle2lmKEcuaW5kZXhPZigibXNpZSIpIT0tMSl7cmV0dXJuImllIjt9 ZWxzZXtpZihHLmluZGV4T2YoInNhZmFyaSIpIT0tMSl7cmV0dXJuInNhZmFyaSI7 fWVsc2V7aWYoRy5pbmRleE9mKCJnZWNrbyIpIT0tMSl7cmV0dXJuImdlY2tvIjt9 ZWxzZXtyZXR1cm4gZmFsc2U7fX19fX19KSgpLHRvU3RyaW5nOmZ1bmN0aW9uKCl7 cmV0dXJuIkNhbGVuZGFyICIrdGhpcy5pZDt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtp Zih0aGlzLmJlZm9yZURlc3Ryb3lFdmVudC5maXJlKCkpe3ZhciBHPXRoaXM7aWYo Ry5uYXZpZ2F0b3Ipe0cubmF2aWdhdG9yLmRlc3Ryb3koKTt9aWYoRy5jZmcpe0cu Y2ZnLmRlc3Ryb3koKTt9QS5wdXJnZUVsZW1lbnQoRy5vRG9tQ29udGFpbmVyLHRy dWUpO0MucmVtb3ZlQ2xhc3MoRy5vRG9tQ29udGFpbmVyLCJ3aXRodGl0bGUiKTtD LnJlbW92ZUNsYXNzKEcub0RvbUNvbnRhaW5lcixHLlN0eWxlLkNTU19DT05UQUlO RVIpO0MucmVtb3ZlQ2xhc3MoRy5vRG9tQ29udGFpbmVyLEcuU3R5bGUuQ1NTX1NJ TkdMRSk7Ry5vRG9tQ29udGFpbmVyLmlubmVySFRNTD0iIjtHLm9Eb21Db250YWlu ZXI9bnVsbDtHLmNlbGxzPW51bGw7dGhpcy5kZXN0cm95RXZlbnQuZmlyZSgpO319 fTtZQUhPTy53aWRnZXQuQ2FsZW5kYXI9RjtZQUhPTy53aWRnZXQuQ2FsZW5kYXJf Q29yZT1ZQUhPTy53aWRnZXQuQ2FsZW5kYXI7WUFIT08ud2lkZ2V0LkNhbF9Db3Jl PVlBSE9PLndpZGdldC5DYWxlbmRhcjt9KSgpOyhmdW5jdGlvbigpe3ZhciBEPVlB SE9PLnV0aWwuRG9tLEY9WUFIT08ud2lkZ2V0LkRhdGVNYXRoLEE9WUFIT08udXRp bC5FdmVudCxFPVlBSE9PLmxhbmcsRz1ZQUhPTy53aWRnZXQuQ2FsZW5kYXI7ZnVu Y3Rpb24gQihKLEgsSSl7aWYoYXJndW1lbnRzLmxlbmd0aD4wKXt0aGlzLmluaXQu YXBwbHkodGhpcyxhcmd1bWVudHMpO319Qi5fREVGQVVMVF9DT05GSUc9Ry5fREVG QVVMVF9DT05GSUc7Qi5fREVGQVVMVF9DT05GSUcuUEFHRVM9e2tleToicGFnZXMi LHZhbHVlOjJ9O3ZhciBDPUIuX0RFRkFVTFRfQ09ORklHO0IucHJvdG90eXBlPXtp bml0OmZ1bmN0aW9uKEssSSxKKXt2YXIgSD10aGlzLl9wYXJzZUFyZ3MoYXJndW1l bnRzKTtLPUguaWQ7ST1ILmNvbnRhaW5lcjtKPUguY29uZmlnO3RoaXMub0RvbUNv bnRhaW5lcj1ELmdldChJKTtpZighdGhpcy5vRG9tQ29udGFpbmVyLmlkKXt0aGlz Lm9Eb21Db250YWluZXIuaWQ9RC5nZW5lcmF0ZUlkKCk7fWlmKCFLKXtLPXRoaXMu b0RvbUNvbnRhaW5lci5pZCsiX3QiO310aGlzLmlkPUs7dGhpcy5jb250YWluZXJJ ZD10aGlzLm9Eb21Db250YWluZXIuaWQ7dGhpcy5pbml0RXZlbnRzKCk7dGhpcy5p bml0U3R5bGVzKCk7dGhpcy5wYWdlcz1bXTtELmFkZENsYXNzKHRoaXMub0RvbUNv bnRhaW5lcixCLkNTU19DT05UQUlORVIpO0QuYWRkQ2xhc3ModGhpcy5vRG9tQ29u dGFpbmVyLEIuQ1NTX01VTFRJX1VQKTt0aGlzLmNmZz1uZXcgWUFIT08udXRpbC5D b25maWcodGhpcyk7dGhpcy5PcHRpb25zPXt9O3RoaXMuTG9jYWxlPXt9O3RoaXMu c2V0dXBDb25maWcoKTtpZihKKXt0aGlzLmNmZy5hcHBseUNvbmZpZyhKLHRydWUp O310aGlzLmNmZy5maXJlUXVldWUoKTtpZihZQUhPTy5lbnYudWEub3BlcmEpe3Ro aXMucmVuZGVyRXZlbnQuc3Vic2NyaWJlKHRoaXMuX2ZpeFdpZHRoLHRoaXMsdHJ1 ZSk7dGhpcy5zaG93RXZlbnQuc3Vic2NyaWJlKHRoaXMuX2ZpeFdpZHRoLHRoaXMs dHJ1ZSk7fX0sc2V0dXBDb25maWc6ZnVuY3Rpb24oKXt2YXIgSD10aGlzLmNmZztI LmFkZFByb3BlcnR5KEMuUEFHRVMua2V5LHt2YWx1ZTpDLlBBR0VTLnZhbHVlLHZh bGlkYXRvcjpILmNoZWNrTnVtYmVyLGhhbmRsZXI6dGhpcy5jb25maWdQYWdlc30p O0guYWRkUHJvcGVydHkoQy5QQUdFREFURS5rZXkse3ZhbHVlOm5ldyBEYXRlKCks aGFuZGxlcjp0aGlzLmNvbmZpZ1BhZ2VEYXRlfSk7SC5hZGRQcm9wZXJ0eShDLlNF TEVDVEVELmtleSx7dmFsdWU6W10saGFuZGxlcjp0aGlzLmNvbmZpZ1NlbGVjdGVk fSk7SC5hZGRQcm9wZXJ0eShDLlRJVExFLmtleSx7dmFsdWU6Qy5USVRMRS52YWx1 ZSxoYW5kbGVyOnRoaXMuY29uZmlnVGl0bGV9KTtILmFkZFByb3BlcnR5KEMuQ0xP U0Uua2V5LHt2YWx1ZTpDLkNMT1NFLnZhbHVlLGhhbmRsZXI6dGhpcy5jb25maWdD bG9zZX0pO0guYWRkUHJvcGVydHkoQy5JRlJBTUUua2V5LHt2YWx1ZTpDLklGUkFN RS52YWx1ZSxoYW5kbGVyOnRoaXMuY29uZmlnSWZyYW1lLHZhbGlkYXRvcjpILmNo ZWNrQm9vbGVhbn0pO0guYWRkUHJvcGVydHkoQy5NSU5EQVRFLmtleSx7dmFsdWU6 Qy5NSU5EQVRFLnZhbHVlLGhhbmRsZXI6dGhpcy5kZWxlZ2F0ZUNvbmZpZ30pO0gu YWRkUHJvcGVydHkoQy5NQVhEQVRFLmtleSx7dmFsdWU6Qy5NQVhEQVRFLnZhbHVl LGhhbmRsZXI6dGhpcy5kZWxlZ2F0ZUNvbmZpZ30pO0guYWRkUHJvcGVydHkoQy5N VUxUSV9TRUxFQ1Qua2V5LHt2YWx1ZTpDLk1VTFRJX1NFTEVDVC52YWx1ZSxoYW5k bGVyOnRoaXMuZGVsZWdhdGVDb25maWcsdmFsaWRhdG9yOkguY2hlY2tCb29sZWFu fSk7SC5hZGRQcm9wZXJ0eShDLlNUQVJUX1dFRUtEQVkua2V5LHt2YWx1ZTpDLlNU QVJUX1dFRUtEQVkudmFsdWUsaGFuZGxlcjp0aGlzLmRlbGVnYXRlQ29uZmlnLHZh bGlkYXRvcjpILmNoZWNrTnVtYmVyfSk7SC5hZGRQcm9wZXJ0eShDLlNIT1dfV0VF S0RBWVMua2V5LHt2YWx1ZTpDLlNIT1dfV0VFS0RBWVMudmFsdWUsaGFuZGxlcjp0 aGlzLmRlbGVnYXRlQ29uZmlnLHZhbGlkYXRvcjpILmNoZWNrQm9vbGVhbn0pO0gu YWRkUHJvcGVydHkoQy5TSE9XX1dFRUtfSEVBREVSLmtleSx7dmFsdWU6Qy5TSE9X X1dFRUtfSEVBREVSLnZhbHVlLGhhbmRsZXI6dGhpcy5kZWxlZ2F0ZUNvbmZpZyx2 YWxpZGF0b3I6SC5jaGVja0Jvb2xlYW59KTtILmFkZFByb3BlcnR5KEMuU0hPV19X RUVLX0ZPT1RFUi5rZXkse3ZhbHVlOkMuU0hPV19XRUVLX0ZPT1RFUi52YWx1ZSxo YW5kbGVyOnRoaXMuZGVsZWdhdGVDb25maWcsdmFsaWRhdG9yOkguY2hlY2tCb29s ZWFufSk7SC5hZGRQcm9wZXJ0eShDLkhJREVfQkxBTktfV0VFS1Mua2V5LHt2YWx1 ZTpDLkhJREVfQkxBTktfV0VFS1MudmFsdWUsaGFuZGxlcjp0aGlzLmRlbGVnYXRl Q29uZmlnLHZhbGlkYXRvcjpILmNoZWNrQm9vbGVhbn0pO0guYWRkUHJvcGVydHko Qy5OQVZfQVJST1dfTEVGVC5rZXkse3ZhbHVlOkMuTkFWX0FSUk9XX0xFRlQudmFs dWUsaGFuZGxlcjp0aGlzLmRlbGVnYXRlQ29uZmlnfSk7SC5hZGRQcm9wZXJ0eShD Lk5BVl9BUlJPV19SSUdIVC5rZXkse3ZhbHVlOkMuTkFWX0FSUk9XX1JJR0hULnZh bHVlLGhhbmRsZXI6dGhpcy5kZWxlZ2F0ZUNvbmZpZ30pO0guYWRkUHJvcGVydHko Qy5NT05USFNfU0hPUlQua2V5LHt2YWx1ZTpDLk1PTlRIU19TSE9SVC52YWx1ZSxo YW5kbGVyOnRoaXMuZGVsZWdhdGVDb25maWd9KTtILmFkZFByb3BlcnR5KEMuTU9O VEhTX0xPTkcua2V5LHt2YWx1ZTpDLk1PTlRIU19MT05HLnZhbHVlLGhhbmRsZXI6 dGhpcy5kZWxlZ2F0ZUNvbmZpZ30pO0guYWRkUHJvcGVydHkoQy5XRUVLREFZU18x Q0hBUi5rZXkse3ZhbHVlOkMuV0VFS0RBWVNfMUNIQVIudmFsdWUsaGFuZGxlcjp0 aGlzLmRlbGVnYXRlQ29uZmlnfSk7SC5hZGRQcm9wZXJ0eShDLldFRUtEQVlTX1NI T1JULmtleSx7dmFsdWU6Qy5XRUVLREFZU19TSE9SVC52YWx1ZSxoYW5kbGVyOnRo aXMuZGVsZWdhdGVDb25maWd9KTtILmFkZFByb3BlcnR5KEMuV0VFS0RBWVNfTUVE SVVNLmtleSx7dmFsdWU6Qy5XRUVLREFZU19NRURJVU0udmFsdWUsaGFuZGxlcjp0 aGlzLmRlbGVnYXRlQ29uZmlnfSk7SC5hZGRQcm9wZXJ0eShDLldFRUtEQVlTX0xP Tkcua2V5LHt2YWx1ZTpDLldFRUtEQVlTX0xPTkcudmFsdWUsaGFuZGxlcjp0aGlz LmRlbGVnYXRlQ29uZmlnfSk7SC5hZGRQcm9wZXJ0eShDLkxPQ0FMRV9NT05USFMu a2V5LHt2YWx1ZTpDLkxPQ0FMRV9NT05USFMudmFsdWUsaGFuZGxlcjp0aGlzLmRl bGVnYXRlQ29uZmlnfSk7SC5hZGRQcm9wZXJ0eShDLkxPQ0FMRV9XRUVLREFZUy5r ZXkse3ZhbHVlOkMuTE9DQUxFX1dFRUtEQVlTLnZhbHVlLGhhbmRsZXI6dGhpcy5k ZWxlZ2F0ZUNvbmZpZ30pO0guYWRkUHJvcGVydHkoQy5EQVRFX0RFTElNSVRFUi5r ZXkse3ZhbHVlOkMuREFURV9ERUxJTUlURVIudmFsdWUsaGFuZGxlcjp0aGlzLmRl bGVnYXRlQ29uZmlnfSk7SC5hZGRQcm9wZXJ0eShDLkRBVEVfRklFTERfREVMSU1J VEVSLmtleSx7dmFsdWU6Qy5EQVRFX0ZJRUxEX0RFTElNSVRFUi52YWx1ZSxoYW5k bGVyOnRoaXMuZGVsZWdhdGVDb25maWd9KTtILmFkZFByb3BlcnR5KEMuREFURV9S QU5HRV9ERUxJTUlURVIua2V5LHt2YWx1ZTpDLkRBVEVfUkFOR0VfREVMSU1JVEVS LnZhbHVlLGhhbmRsZXI6dGhpcy5kZWxlZ2F0ZUNvbmZpZ30pO0guYWRkUHJvcGVy dHkoQy5NWV9NT05USF9QT1NJVElPTi5rZXkse3ZhbHVlOkMuTVlfTU9OVEhfUE9T SVRJT04udmFsdWUsaGFuZGxlcjp0aGlzLmRlbGVnYXRlQ29uZmlnLHZhbGlkYXRv cjpILmNoZWNrTnVtYmVyfSk7SC5hZGRQcm9wZXJ0eShDLk1ZX1lFQVJfUE9TSVRJ T04ua2V5LHt2YWx1ZTpDLk1ZX1lFQVJfUE9TSVRJT04udmFsdWUsaGFuZGxlcjp0 aGlzLmRlbGVnYXRlQ29uZmlnLHZhbGlkYXRvcjpILmNoZWNrTnVtYmVyfSk7SC5h ZGRQcm9wZXJ0eShDLk1EX01PTlRIX1BPU0lUSU9OLmtleSx7dmFsdWU6Qy5NRF9N T05USF9QT1NJVElPTi52YWx1ZSxoYW5kbGVyOnRoaXMuZGVsZWdhdGVDb25maWcs dmFsaWRhdG9yOkguY2hlY2tOdW1iZXJ9KTtILmFkZFByb3BlcnR5KEMuTURfREFZ X1BPU0lUSU9OLmtleSx7dmFsdWU6Qy5NRF9EQVlfUE9TSVRJT04udmFsdWUsaGFu ZGxlcjp0aGlzLmRlbGVnYXRlQ29uZmlnLHZhbGlkYXRvcjpILmNoZWNrTnVtYmVy fSk7SC5hZGRQcm9wZXJ0eShDLk1EWV9NT05USF9QT1NJVElPTi5rZXkse3ZhbHVl OkMuTURZX01PTlRIX1BPU0lUSU9OLnZhbHVlLGhhbmRsZXI6dGhpcy5kZWxlZ2F0 ZUNvbmZpZyx2YWxpZGF0b3I6SC5jaGVja051bWJlcn0pO0guYWRkUHJvcGVydHko Qy5NRFlfREFZX1BPU0lUSU9OLmtleSx7dmFsdWU6Qy5NRFlfREFZX1BPU0lUSU9O LnZhbHVlLGhhbmRsZXI6dGhpcy5kZWxlZ2F0ZUNvbmZpZyx2YWxpZGF0b3I6SC5j aGVja051bWJlcn0pO0guYWRkUHJvcGVydHkoQy5NRFlfWUVBUl9QT1NJVElPTi5r ZXkse3ZhbHVlOkMuTURZX1lFQVJfUE9TSVRJT04udmFsdWUsaGFuZGxlcjp0aGlz LmRlbGVnYXRlQ29uZmlnLHZhbGlkYXRvcjpILmNoZWNrTnVtYmVyfSk7SC5hZGRQ cm9wZXJ0eShDLk1ZX0xBQkVMX01PTlRIX1BPU0lUSU9OLmtleSx7dmFsdWU6Qy5N WV9MQUJFTF9NT05USF9QT1NJVElPTi52YWx1ZSxoYW5kbGVyOnRoaXMuZGVsZWdh dGVDb25maWcsdmFsaWRhdG9yOkguY2hlY2tOdW1iZXJ9KTtILmFkZFByb3BlcnR5 KEMuTVlfTEFCRUxfWUVBUl9QT1NJVElPTi5rZXkse3ZhbHVlOkMuTVlfTEFCRUxf WUVBUl9QT1NJVElPTi52YWx1ZSxoYW5kbGVyOnRoaXMuZGVsZWdhdGVDb25maWcs dmFsaWRhdG9yOkguY2hlY2tOdW1iZXJ9KTtILmFkZFByb3BlcnR5KEMuTVlfTEFC RUxfTU9OVEhfU1VGRklYLmtleSx7dmFsdWU6Qy5NWV9MQUJFTF9NT05USF9TVUZG SVgudmFsdWUsaGFuZGxlcjp0aGlzLmRlbGVnYXRlQ29uZmlnfSk7SC5hZGRQcm9w ZXJ0eShDLk1ZX0xBQkVMX1lFQVJfU1VGRklYLmtleSx7dmFsdWU6Qy5NWV9MQUJF TF9ZRUFSX1NVRkZJWC52YWx1ZSxoYW5kbGVyOnRoaXMuZGVsZWdhdGVDb25maWd9 KTtILmFkZFByb3BlcnR5KEMuTkFWLmtleSx7dmFsdWU6Qy5OQVYudmFsdWUsaGFu ZGxlcjp0aGlzLmNvbmZpZ05hdmlnYXRvcn0pO0guYWRkUHJvcGVydHkoQy5TVFJJ TkdTLmtleSx7dmFsdWU6Qy5TVFJJTkdTLnZhbHVlLGhhbmRsZXI6dGhpcy5jb25m aWdTdHJpbmdzLHZhbGlkYXRvcjpmdW5jdGlvbihJKXtyZXR1cm4gRS5pc09iamVj dChJKTt9LHN1cGVyY2VkZXM6Qy5TVFJJTkdTLnN1cGVyY2VkZXN9KTt9LGluaXRF dmVudHM6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLEw9IkV2ZW50IixNPVlBSE9PLnV0 aWwuQ3VzdG9tRXZlbnQ7dmFyIEk9ZnVuY3Rpb24oTyxSLE4pe2Zvcih2YXIgUT0w O1E8Si5wYWdlcy5sZW5ndGg7KytRKXt2YXIgUD1KLnBhZ2VzW1FdO1BbdGhpcy50 eXBlK0xdLnN1YnNjcmliZShPLFIsTik7fX07dmFyIEg9ZnVuY3Rpb24oTixRKXtm b3IodmFyIFA9MDtQPEoucGFnZXMubGVuZ3RoOysrUCl7dmFyIE89Si5wYWdlc1tQ XTtPW3RoaXMudHlwZStMXS51bnN1YnNjcmliZShOLFEpO319O3ZhciBLPUcuX0VW RU5UX1RZUEVTO0ouYmVmb3JlU2VsZWN0RXZlbnQ9bmV3IE0oSy5CRUZPUkVfU0VM RUNUKTtKLmJlZm9yZVNlbGVjdEV2ZW50LnN1YnNjcmliZT1JO0ouYmVmb3JlU2Vs ZWN0RXZlbnQudW5zdWJzY3JpYmU9SDtKLnNlbGVjdEV2ZW50PW5ldyBNKEsuU0VM RUNUKTtKLnNlbGVjdEV2ZW50LnN1YnNjcmliZT1JO0ouc2VsZWN0RXZlbnQudW5z dWJzY3JpYmU9SDtKLmJlZm9yZURlc2VsZWN0RXZlbnQ9bmV3IE0oSy5CRUZPUkVf REVTRUxFQ1QpO0ouYmVmb3JlRGVzZWxlY3RFdmVudC5zdWJzY3JpYmU9STtKLmJl Zm9yZURlc2VsZWN0RXZlbnQudW5zdWJzY3JpYmU9SDtKLmRlc2VsZWN0RXZlbnQ9 bmV3IE0oSy5ERVNFTEVDVCk7Si5kZXNlbGVjdEV2ZW50LnN1YnNjcmliZT1JO0ou ZGVzZWxlY3RFdmVudC51bnN1YnNjcmliZT1IO0ouY2hhbmdlUGFnZUV2ZW50PW5l dyBNKEsuQ0hBTkdFX1BBR0UpO0ouY2hhbmdlUGFnZUV2ZW50LnN1YnNjcmliZT1J O0ouY2hhbmdlUGFnZUV2ZW50LnVuc3Vic2NyaWJlPUg7Si5iZWZvcmVSZW5kZXJF dmVudD1uZXcgTShLLkJFRk9SRV9SRU5ERVIpO0ouYmVmb3JlUmVuZGVyRXZlbnQu c3Vic2NyaWJlPUk7Si5iZWZvcmVSZW5kZXJFdmVudC51bnN1YnNjcmliZT1IO0ou cmVuZGVyRXZlbnQ9bmV3IE0oSy5SRU5ERVIpO0oucmVuZGVyRXZlbnQuc3Vic2Ny aWJlPUk7Si5yZW5kZXJFdmVudC51bnN1YnNjcmliZT1IO0oucmVzZXRFdmVudD1u ZXcgTShLLlJFU0VUKTtKLnJlc2V0RXZlbnQuc3Vic2NyaWJlPUk7Si5yZXNldEV2 ZW50LnVuc3Vic2NyaWJlPUg7Si5jbGVhckV2ZW50PW5ldyBNKEsuQ0xFQVIpO0ou Y2xlYXJFdmVudC5zdWJzY3JpYmU9STtKLmNsZWFyRXZlbnQudW5zdWJzY3JpYmU9 SDtKLmJlZm9yZVNob3dFdmVudD1uZXcgTShLLkJFRk9SRV9TSE9XKTtKLnNob3dF dmVudD1uZXcgTShLLlNIT1cpO0ouYmVmb3JlSGlkZUV2ZW50PW5ldyBNKEsuQkVG T1JFX0hJREUpO0ouaGlkZUV2ZW50PW5ldyBNKEsuSElERSk7Si5iZWZvcmVTaG93 TmF2RXZlbnQ9bmV3IE0oSy5CRUZPUkVfU0hPV19OQVYpO0ouc2hvd05hdkV2ZW50 PW5ldyBNKEsuU0hPV19OQVYpO0ouYmVmb3JlSGlkZU5hdkV2ZW50PW5ldyBNKEsu QkVGT1JFX0hJREVfTkFWKTtKLmhpZGVOYXZFdmVudD1uZXcgTShLLkhJREVfTkFW KTtKLmJlZm9yZVJlbmRlck5hdkV2ZW50PW5ldyBNKEsuQkVGT1JFX1JFTkRFUl9O QVYpO0oucmVuZGVyTmF2RXZlbnQ9bmV3IE0oSy5SRU5ERVJfTkFWKTtKLmJlZm9y ZURlc3Ryb3lFdmVudD1uZXcgTShLLkJFRk9SRV9ERVNUUk9ZKTtKLmRlc3Ryb3lF dmVudD1uZXcgTShLLkRFU1RST1kpO30sY29uZmlnUGFnZXM6ZnVuY3Rpb24oVCxS LE4pe3ZhciBMPVJbMF0sSj1DLlBBR0VEQVRFLmtleSxXPSJfIixNLE89bnVsbCxT PSJncm91cGNhbCIsVj0iZmlyc3Qtb2YtdHlwZSIsSz0ibGFzdC1vZi10eXBlIjtm b3IodmFyIEk9MDtJPEw7KytJKXt2YXIgVT10aGlzLmlkK1crSSxRPXRoaXMuY29u dGFpbmVySWQrVytJLFA9dGhpcy5jZmcuZ2V0Q29uZmlnKCk7UC5jbG9zZT1mYWxz ZTtQLnRpdGxlPWZhbHNlO1AubmF2aWdhdG9yPW51bGw7aWYoST4wKXtNPW5ldyBE YXRlKE8pO3RoaXMuX3NldE1vbnRoT25EYXRlKE0sTS5nZXRNb250aCgpK0kpO1Au cGFnZURhdGU9TTt9dmFyIEg9dGhpcy5jb25zdHJ1Y3RDaGlsZChVLFEsUCk7RC5y ZW1vdmVDbGFzcyhILm9Eb21Db250YWluZXIsdGhpcy5TdHlsZS5DU1NfU0lOR0xF KTtELmFkZENsYXNzKEgub0RvbUNvbnRhaW5lcixTKTtpZihJPT09MCl7Tz1ILmNm Zy5nZXRQcm9wZXJ0eShKKTtELmFkZENsYXNzKEgub0RvbUNvbnRhaW5lcixWKTt9 aWYoST09KEwtMSkpe0QuYWRkQ2xhc3MoSC5vRG9tQ29udGFpbmVyLEspO31ILnBh cmVudD10aGlzO0guaW5kZXg9STt0aGlzLnBhZ2VzW3RoaXMucGFnZXMubGVuZ3Ro XT1IO319LGNvbmZpZ1BhZ2VEYXRlOmZ1bmN0aW9uKE8sTixMKXt2YXIgSj1OWzBd LE07dmFyIEs9Qy5QQUdFREFURS5rZXk7Zm9yKHZhciBJPTA7STx0aGlzLnBhZ2Vz Lmxlbmd0aDsrK0kpe3ZhciBIPXRoaXMucGFnZXNbSV07aWYoST09PTApe009SC5f cGFyc2VQYWdlRGF0ZShKKTtILmNmZy5zZXRQcm9wZXJ0eShLLE0pO31lbHNle3Zh ciBQPW5ldyBEYXRlKE0pO3RoaXMuX3NldE1vbnRoT25EYXRlKFAsUC5nZXRNb250 aCgpK0kpO0guY2ZnLnNldFByb3BlcnR5KEssUCk7fX19LGNvbmZpZ1NlbGVjdGVk OmZ1bmN0aW9uKEosSCxMKXt2YXIgSz1DLlNFTEVDVEVELmtleTt0aGlzLmRlbGVn YXRlQ29uZmlnKEosSCxMKTt2YXIgST0odGhpcy5wYWdlcy5sZW5ndGg+MCk/dGhp cy5wYWdlc1swXS5jZmcuZ2V0UHJvcGVydHkoSyk6W107dGhpcy5jZmcuc2V0UHJv cGVydHkoSyxJLHRydWUpO30sZGVsZWdhdGVDb25maWc6ZnVuY3Rpb24oSSxILEwp e3ZhciBNPUhbMF07dmFyIEs7Zm9yKHZhciBKPTA7Sjx0aGlzLnBhZ2VzLmxlbmd0 aDtKKyspe0s9dGhpcy5wYWdlc1tKXTtLLmNmZy5zZXRQcm9wZXJ0eShJLE0pO319 LHNldENoaWxkRnVuY3Rpb246ZnVuY3Rpb24oSyxJKXt2YXIgSD10aGlzLmNmZy5n ZXRQcm9wZXJ0eShDLlBBR0VTLmtleSk7Zm9yKHZhciBKPTA7SjxIOysrSil7dGhp cy5wYWdlc1tKXVtLXT1JO319LGNhbGxDaGlsZEZ1bmN0aW9uOmZ1bmN0aW9uKE0s SSl7dmFyIEg9dGhpcy5jZmcuZ2V0UHJvcGVydHkoQy5QQUdFUy5rZXkpO2Zvcih2 YXIgTD0wO0w8SDsrK0wpe3ZhciBLPXRoaXMucGFnZXNbTF07aWYoS1tNXSl7dmFy IEo9S1tNXTtKLmNhbGwoSyxJKTt9fX0sY29uc3RydWN0Q2hpbGQ6ZnVuY3Rpb24o SyxJLEope3ZhciBIPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEkpO2lmKCFIKXtI PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0guaWQ9STt0aGlzLm9Eb21D b250YWluZXIuYXBwZW5kQ2hpbGQoSCk7fXJldHVybiBuZXcgRyhLLEksSik7fSxz ZXRNb250aDpmdW5jdGlvbihMKXtMPXBhcnNlSW50KEwsMTApO3ZhciBNO3ZhciBJ PUMuUEFHRURBVEUua2V5O2Zvcih2YXIgSz0wO0s8dGhpcy5wYWdlcy5sZW5ndGg7 KytLKXt2YXIgSj10aGlzLnBhZ2VzW0tdO3ZhciBIPUouY2ZnLmdldFByb3BlcnR5 KEkpO2lmKEs9PT0wKXtNPUguZ2V0RnVsbFllYXIoKTt9ZWxzZXtILnNldEZ1bGxZ ZWFyKE0pO310aGlzLl9zZXRNb250aE9uRGF0ZShILEwrSyk7Si5jZmcuc2V0UHJv cGVydHkoSSxIKTt9fSxzZXRZZWFyOmZ1bmN0aW9uKEope3ZhciBJPUMuUEFHRURB VEUua2V5O0o9cGFyc2VJbnQoSiwxMCk7Zm9yKHZhciBMPTA7TDx0aGlzLnBhZ2Vz Lmxlbmd0aDsrK0wpe3ZhciBLPXRoaXMucGFnZXNbTF07dmFyIEg9Sy5jZmcuZ2V0 UHJvcGVydHkoSSk7aWYoKEguZ2V0TW9udGgoKSsxKT09MSYmTD4wKXtKKz0xO31L LnNldFllYXIoSik7fX0scmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJIZWFk ZXIoKTtmb3IodmFyIEk9MDtJPHRoaXMucGFnZXMubGVuZ3RoOysrSSl7dmFyIEg9 dGhpcy5wYWdlc1tJXTtILnJlbmRlcigpO310aGlzLnJlbmRlckZvb3RlcigpO30s c2VsZWN0OmZ1bmN0aW9uKEgpe2Zvcih2YXIgSj0wO0o8dGhpcy5wYWdlcy5sZW5n dGg7KytKKXt2YXIgST10aGlzLnBhZ2VzW0pdO0kuc2VsZWN0KEgpO31yZXR1cm4g dGhpcy5nZXRTZWxlY3RlZERhdGVzKCk7fSxzZWxlY3RDZWxsOmZ1bmN0aW9uKEgp e2Zvcih2YXIgSj0wO0o8dGhpcy5wYWdlcy5sZW5ndGg7KytKKXt2YXIgST10aGlz LnBhZ2VzW0pdO0kuc2VsZWN0Q2VsbChIKTt9cmV0dXJuIHRoaXMuZ2V0U2VsZWN0 ZWREYXRlcygpO30sZGVzZWxlY3Q6ZnVuY3Rpb24oSCl7Zm9yKHZhciBKPTA7Sjx0 aGlzLnBhZ2VzLmxlbmd0aDsrK0ope3ZhciBJPXRoaXMucGFnZXNbSl07SS5kZXNl bGVjdChIKTt9cmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWREYXRlcygpO30sZGVzZWxl Y3RBbGw6ZnVuY3Rpb24oKXtmb3IodmFyIEk9MDtJPHRoaXMucGFnZXMubGVuZ3Ro OysrSSl7dmFyIEg9dGhpcy5wYWdlc1tJXTtILmRlc2VsZWN0QWxsKCk7fXJldHVy biB0aGlzLmdldFNlbGVjdGVkRGF0ZXMoKTt9LGRlc2VsZWN0Q2VsbDpmdW5jdGlv bihIKXtmb3IodmFyIEo9MDtKPHRoaXMucGFnZXMubGVuZ3RoOysrSil7dmFyIEk9 dGhpcy5wYWdlc1tKXTtJLmRlc2VsZWN0Q2VsbChIKTt9cmV0dXJuIHRoaXMuZ2V0 U2VsZWN0ZWREYXRlcygpO30scmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIEk9MDtJ PHRoaXMucGFnZXMubGVuZ3RoOysrSSl7dmFyIEg9dGhpcy5wYWdlc1tJXTtILnJl c2V0KCk7fX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIEk9MDtJPHRoaXMucGFn ZXMubGVuZ3RoOysrSSl7dmFyIEg9dGhpcy5wYWdlc1tJXTtILmNsZWFyKCk7fXRo aXMuY2ZnLnNldFByb3BlcnR5KEMuU0VMRUNURUQua2V5LFtdKTt0aGlzLmNmZy5z ZXRQcm9wZXJ0eShDLlBBR0VEQVRFLmtleSxuZXcgRGF0ZSh0aGlzLnBhZ2VzWzBd LnRvZGF5LmdldFRpbWUoKSkpO3RoaXMucmVuZGVyKCk7fSxuZXh0TW9udGg6ZnVu Y3Rpb24oKXtmb3IodmFyIEk9MDtJPHRoaXMucGFnZXMubGVuZ3RoOysrSSl7dmFy IEg9dGhpcy5wYWdlc1tJXTtILm5leHRNb250aCgpO319LHByZXZpb3VzTW9udGg6 ZnVuY3Rpb24oKXtmb3IodmFyIEk9dGhpcy5wYWdlcy5sZW5ndGgtMTtJPj0wOy0t SSl7dmFyIEg9dGhpcy5wYWdlc1tJXTtILnByZXZpb3VzTW9udGgoKTt9fSxuZXh0 WWVhcjpmdW5jdGlvbigpe2Zvcih2YXIgST0wO0k8dGhpcy5wYWdlcy5sZW5ndGg7 KytJKXt2YXIgSD10aGlzLnBhZ2VzW0ldO0gubmV4dFllYXIoKTt9fSxwcmV2aW91 c1llYXI6ZnVuY3Rpb24oKXtmb3IodmFyIEk9MDtJPHRoaXMucGFnZXMubGVuZ3Ro OysrSSl7dmFyIEg9dGhpcy5wYWdlc1tJXTtILnByZXZpb3VzWWVhcigpO319LGdl dFNlbGVjdGVkRGF0ZXM6ZnVuY3Rpb24oKXt2YXIgSj1bXTt2YXIgST10aGlzLmNm Zy5nZXRQcm9wZXJ0eShDLlNFTEVDVEVELmtleSk7Zm9yKHZhciBMPTA7TDxJLmxl bmd0aDsrK0wpe3ZhciBLPUlbTF07dmFyIEg9Ri5nZXREYXRlKEtbMF0sS1sxXS0x LEtbMl0pO0oucHVzaChIKTt9Si5zb3J0KGZ1bmN0aW9uKE4sTSl7cmV0dXJuIE4t TTt9KTtyZXR1cm4gSjt9LGFkZFJlbmRlcmVyOmZ1bmN0aW9uKEgsSSl7Zm9yKHZh ciBLPTA7Szx0aGlzLnBhZ2VzLmxlbmd0aDsrK0spe3ZhciBKPXRoaXMucGFnZXNb S107Si5hZGRSZW5kZXJlcihILEkpO319LGFkZE1vbnRoUmVuZGVyZXI6ZnVuY3Rp b24oSyxIKXtmb3IodmFyIEo9MDtKPHRoaXMucGFnZXMubGVuZ3RoOysrSil7dmFy IEk9dGhpcy5wYWdlc1tKXTtJLmFkZE1vbnRoUmVuZGVyZXIoSyxIKTt9fSxhZGRX ZWVrZGF5UmVuZGVyZXI6ZnVuY3Rpb24oSSxIKXtmb3IodmFyIEs9MDtLPHRoaXMu cGFnZXMubGVuZ3RoOysrSyl7dmFyIEo9dGhpcy5wYWdlc1tLXTtKLmFkZFdlZWtk YXlSZW5kZXJlcihJLEgpO319LHJlbW92ZVJlbmRlcmVyczpmdW5jdGlvbigpe3Ro aXMuY2FsbENoaWxkRnVuY3Rpb24oInJlbW92ZVJlbmRlcmVycyIpO30scmVuZGVy SGVhZGVyOmZ1bmN0aW9uKCl7fSxyZW5kZXJGb290ZXI6ZnVuY3Rpb24oKXt9LGFk ZE1vbnRoczpmdW5jdGlvbihIKXt0aGlzLmNhbGxDaGlsZEZ1bmN0aW9uKCJhZGRN b250aHMiLEgpO30sc3VidHJhY3RNb250aHM6ZnVuY3Rpb24oSCl7dGhpcy5jYWxs Q2hpbGRGdW5jdGlvbigic3VidHJhY3RNb250aHMiLEgpO30sYWRkWWVhcnM6ZnVu Y3Rpb24oSCl7dGhpcy5jYWxsQ2hpbGRGdW5jdGlvbigiYWRkWWVhcnMiLEgpO30s c3VidHJhY3RZZWFyczpmdW5jdGlvbihIKXt0aGlzLmNhbGxDaGlsZEZ1bmN0aW9u KCJzdWJ0cmFjdFllYXJzIixIKTt9LGdldENhbGVuZGFyUGFnZTpmdW5jdGlvbihL KXt2YXIgTT1udWxsO2lmKEspe3ZhciBOPUsuZ2V0RnVsbFllYXIoKSxKPUsuZ2V0 TW9udGgoKTt2YXIgST10aGlzLnBhZ2VzO2Zvcih2YXIgTD0wO0w8SS5sZW5ndGg7 KytMKXt2YXIgSD1JW0xdLmNmZy5nZXRQcm9wZXJ0eSgicGFnZWRhdGUiKTtpZihI LmdldEZ1bGxZZWFyKCk9PT1OJiZILmdldE1vbnRoKCk9PT1KKXtNPUlbTF07YnJl YWs7fX19cmV0dXJuIE07fSxfc2V0TW9udGhPbkRhdGU6ZnVuY3Rpb24oSSxKKXtp ZihZQUhPTy5lbnYudWEud2Via2l0JiZZQUhPTy5lbnYudWEud2Via2l0PDQyMCYm KEo8MHx8Sj4xMSkpe3ZhciBIPUYuYWRkKEksRi5NT05USCxKLUkuZ2V0TW9udGgo KSk7SS5zZXRUaW1lKEguZ2V0VGltZSgpKTt9ZWxzZXtJLnNldE1vbnRoKEopO319 LF9maXhXaWR0aDpmdW5jdGlvbigpe3ZhciBIPTA7Zm9yKHZhciBKPTA7Sjx0aGlz LnBhZ2VzLmxlbmd0aDsrK0ope3ZhciBJPXRoaXMucGFnZXNbSl07SCs9SS5vRG9t Q29udGFpbmVyLm9mZnNldFdpZHRoO31pZihIPjApe3RoaXMub0RvbUNvbnRhaW5l ci5zdHlsZS53aWR0aD1IKyJweCI7fX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1 cm4iQ2FsZW5kYXJHcm91cCAiK3RoaXMuaWQ7fSxkZXN0cm95OmZ1bmN0aW9uKCl7 aWYodGhpcy5iZWZvcmVEZXN0cm95RXZlbnQuZmlyZSgpKXt2YXIgSj10aGlzO2lm KEoubmF2aWdhdG9yKXtKLm5hdmlnYXRvci5kZXN0cm95KCk7fWlmKEouY2ZnKXtK LmNmZy5kZXN0cm95KCk7fUEucHVyZ2VFbGVtZW50KEoub0RvbUNvbnRhaW5lcix0 cnVlKTtELnJlbW92ZUNsYXNzKEoub0RvbUNvbnRhaW5lcixCLkNTU19DT05UQUlO RVIpO0QucmVtb3ZlQ2xhc3MoSi5vRG9tQ29udGFpbmVyLEIuQ1NTX01VTFRJX1VQ KTtmb3IodmFyIEk9MCxIPUoucGFnZXMubGVuZ3RoO0k8SDtJKyspe0oucGFnZXNb SV0uZGVzdHJveSgpO0oucGFnZXNbSV09bnVsbDt9Si5vRG9tQ29udGFpbmVyLmlu bmVySFRNTD0iIjtKLm9Eb21Db250YWluZXI9bnVsbDt0aGlzLmRlc3Ryb3lFdmVu dC5maXJlKCk7fX19O0IuQ1NTX0NPTlRBSU5FUj0ieXVpLWNhbGNvbnRhaW5lciI7 Qi5DU1NfTVVMVElfVVA9Im11bHRpIjtCLkNTU18yVVBUSVRMRT0idGl0bGUiO0Iu Q1NTXzJVUENMT1NFPSJjbG9zZS1pY29uIjtZQUhPTy5sYW5nLmF1Z21lbnRQcm90 byhCLEcsImJ1aWxkRGF5TGFiZWwiLCJidWlsZE1vbnRoTGFiZWwiLCJyZW5kZXJP dXRPZkJvdW5kc0RhdGUiLCJyZW5kZXJSb3dIZWFkZXIiLCJyZW5kZXJSb3dGb290 ZXIiLCJyZW5kZXJDZWxsRGVmYXVsdCIsInN0eWxlQ2VsbERlZmF1bHQiLCJyZW5k ZXJDZWxsU3R5bGVIaWdobGlnaHQxIiwicmVuZGVyQ2VsbFN0eWxlSGlnaGxpZ2h0 MiIsInJlbmRlckNlbGxTdHlsZUhpZ2hsaWdodDMiLCJyZW5kZXJDZWxsU3R5bGVI aWdobGlnaHQ0IiwicmVuZGVyQ2VsbFN0eWxlVG9kYXkiLCJyZW5kZXJDZWxsU3R5 bGVTZWxlY3RlZCIsInJlbmRlckNlbGxOb3RUaGlzTW9udGgiLCJyZW5kZXJCb2R5 Q2VsbFJlc3RyaWN0ZWQiLCJpbml0U3R5bGVzIiwiY29uZmlnVGl0bGUiLCJjb25m aWdDbG9zZSIsImNvbmZpZ0lmcmFtZSIsImNvbmZpZ1N0cmluZ3MiLCJjb25maWdO YXZpZ2F0b3IiLCJjcmVhdGVUaXRsZUJhciIsImNyZWF0ZUNsb3NlQnV0dG9uIiwi cmVtb3ZlVGl0bGVCYXIiLCJyZW1vdmVDbG9zZUJ1dHRvbiIsImhpZGUiLCJzaG93 IiwidG9EYXRlIiwiX3RvRGF0ZSIsIl9wYXJzZUFyZ3MiLCJicm93c2VyIik7WUFI T08ud2lkZ2V0LkNhbEdycD1CO1lBSE9PLndpZGdldC5DYWxlbmRhckdyb3VwPUI7 WUFIT08ud2lkZ2V0LkNhbGVuZGFyMnVwPWZ1bmN0aW9uKEosSCxJKXt0aGlzLmlu aXQoSixILEkpO307WUFIT08uZXh0ZW5kKFlBSE9PLndpZGdldC5DYWxlbmRhcjJ1 cCxCKTtZQUhPTy53aWRnZXQuQ2FsMnVwPVlBSE9PLndpZGdldC5DYWxlbmRhcjJ1 cDt9KSgpO1lBSE9PLndpZGdldC5DYWxlbmRhck5hdmlnYXRvcj1mdW5jdGlvbihB KXt0aGlzLmluaXQoQSk7fTsoZnVuY3Rpb24oKXt2YXIgQT1ZQUhPTy53aWRnZXQu Q2FsZW5kYXJOYXZpZ2F0b3I7QS5DTEFTU0VTPXtOQVY6Inl1aS1jYWwtbmF2IixO QVZfVklTSUJMRToieXVpLWNhbC1uYXYtdmlzaWJsZSIsTUFTSzoieXVpLWNhbC1u YXYtbWFzayIsWUVBUjoieXVpLWNhbC1uYXYteSIsTU9OVEg6Inl1aS1jYWwtbmF2 LW0iLEJVVFRPTlM6Inl1aS1jYWwtbmF2LWIiLEJVVFRPTjoieXVpLWNhbC1uYXYt YnRuIixFUlJPUjoieXVpLWNhbC1uYXYtZSIsWUVBUl9DVFJMOiJ5dWktY2FsLW5h di15YyIsTU9OVEhfQ1RSTDoieXVpLWNhbC1uYXYtbWMiLElOVkFMSUQ6Inl1aS1p bnZhbGlkIixERUZBVUxUOiJ5dWktZGVmYXVsdCJ9O0EuX0RFRkFVTFRfQ0ZHPXtz dHJpbmdzOnttb250aDoiTW9udGgiLHllYXI6IlllYXIiLHN1Ym1pdDoiT2theSIs Y2FuY2VsOiJDYW5jZWwiLGludmFsaWRZZWFyOiJZZWFyIG5lZWRzIHRvIGJlIGEg bnVtYmVyIn0sbW9udGhGb3JtYXQ6WUFIT08ud2lkZ2V0LkNhbGVuZGFyLkxPTkcs aW5pdGlhbEZvY3VzOiJ5ZWFyIn07QS5JRF9TVUZGSVg9Il9uYXYiO0EuTU9OVEhf U1VGRklYPSJfbW9udGgiO0EuWUVBUl9TVUZGSVg9Il95ZWFyIjtBLkVSUk9SX1NV RkZJWD0iX2Vycm9yIjtBLkNBTkNFTF9TVUZGSVg9Il9jYW5jZWwiO0EuU1VCTUlU X1NVRkZJWD0iX3N1Ym1pdCI7QS5ZUl9NQVhfRElHSVRTPTQ7QS5ZUl9NSU5PUl9J TkM9MTtBLllSX01BSk9SX0lOQz0xMDtBLlVQREFURV9ERUxBWT01MDtBLllSX1BB VFRFUk49L15cZCskLztBLlRSSU09L15ccyooLio/KVxzKiQvO30pKCk7WUFIT08u d2lkZ2V0LkNhbGVuZGFyTmF2aWdhdG9yLnByb3RvdHlwZT17aWQ6bnVsbCxjYWw6 bnVsbCxuYXZFbDpudWxsLG1hc2tFbDpudWxsLHllYXJFbDpudWxsLG1vbnRoRWw6 bnVsbCxlcnJvckVsOm51bGwsc3VibWl0RWw6bnVsbCxjYW5jZWxFbDpudWxsLGZp cnN0Q3RybDpudWxsLGxhc3RDdHJsOm51bGwsX2RvYzpudWxsLF95ZWFyOm51bGws X21vbnRoOjAsX19yZW5kZXJlZDpmYWxzZSxpbml0OmZ1bmN0aW9uKEEpe3ZhciBD PUEub0RvbUNvbnRhaW5lcjt0aGlzLmNhbD1BO3RoaXMuaWQ9Qy5pZCtZQUhPTy53 aWRnZXQuQ2FsZW5kYXJOYXZpZ2F0b3IuSURfU1VGRklYO3RoaXMuX2RvYz1DLm93 bmVyRG9jdW1lbnQ7dmFyIEI9WUFIT08uZW52LnVhLmllO3RoaXMuX19pc0lFUXVp cmtzPShCJiYoKEI8PTYpfHwodGhpcy5fZG9jLmNvbXBhdE1vZGU9PSJCYWNrQ29t cGF0IikpKTt9LHNob3c6ZnVuY3Rpb24oKXt2YXIgQT1ZQUhPTy53aWRnZXQuQ2Fs ZW5kYXJOYXZpZ2F0b3IuQ0xBU1NFUztpZih0aGlzLmNhbC5iZWZvcmVTaG93TmF2 RXZlbnQuZmlyZSgpKXtpZighdGhpcy5fX3JlbmRlcmVkKXt0aGlzLnJlbmRlcigp O310aGlzLmNsZWFyRXJyb3JzKCk7dGhpcy5fdXBkYXRlTW9udGhVSSgpO3RoaXMu X3VwZGF0ZVllYXJVSSgpO3RoaXMuX3Nob3codGhpcy5uYXZFbCx0cnVlKTt0aGlz LnNldEluaXRpYWxGb2N1cygpO3RoaXMuc2hvd01hc2soKTtZQUhPTy51dGlsLkRv bS5hZGRDbGFzcyh0aGlzLmNhbC5vRG9tQ29udGFpbmVyLEEuTkFWX1ZJU0lCTEUp O3RoaXMuY2FsLnNob3dOYXZFdmVudC5maXJlKCk7fX0saGlkZTpmdW5jdGlvbigp e3ZhciBBPVlBSE9PLndpZGdldC5DYWxlbmRhck5hdmlnYXRvci5DTEFTU0VTO2lm KHRoaXMuY2FsLmJlZm9yZUhpZGVOYXZFdmVudC5maXJlKCkpe3RoaXMuX3Nob3co dGhpcy5uYXZFbCxmYWxzZSk7dGhpcy5oaWRlTWFzaygpO1lBSE9PLnV0aWwuRG9t LnJlbW92ZUNsYXNzKHRoaXMuY2FsLm9Eb21Db250YWluZXIsQS5OQVZfVklTSUJM RSk7dGhpcy5jYWwuaGlkZU5hdkV2ZW50LmZpcmUoKTt9fSxzaG93TWFzazpmdW5j dGlvbigpe3RoaXMuX3Nob3codGhpcy5tYXNrRWwsdHJ1ZSk7aWYodGhpcy5fX2lz SUVRdWlya3Mpe3RoaXMuX3N5bmNNYXNrKCk7fX0saGlkZU1hc2s6ZnVuY3Rpb24o KXt0aGlzLl9zaG93KHRoaXMubWFza0VsLGZhbHNlKTt9LGdldE1vbnRoOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuX21vbnRoO30sZ2V0WWVhcjpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLl95ZWFyO30sc2V0TW9udGg6ZnVuY3Rpb24oQSl7aWYoQT49MCYm QTwxMil7dGhpcy5fbW9udGg9QTt9dGhpcy5fdXBkYXRlTW9udGhVSSgpO30sc2V0 WWVhcjpmdW5jdGlvbihCKXt2YXIgQT1ZQUhPTy53aWRnZXQuQ2FsZW5kYXJOYXZp Z2F0b3IuWVJfUEFUVEVSTjtpZihZQUhPTy5sYW5nLmlzTnVtYmVyKEIpJiZBLnRl c3QoQisiIikpe3RoaXMuX3llYXI9Qjt9dGhpcy5fdXBkYXRlWWVhclVJKCk7fSxy ZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLmNhbC5iZWZvcmVSZW5kZXJOYXZFdmVudC5m aXJlKCk7aWYoIXRoaXMuX19yZW5kZXJlZCl7dGhpcy5jcmVhdGVOYXYoKTt0aGlz LmNyZWF0ZU1hc2soKTt0aGlzLmFwcGx5TGlzdGVuZXJzKCk7dGhpcy5fX3JlbmRl cmVkPXRydWU7fXRoaXMuY2FsLnJlbmRlck5hdkV2ZW50LmZpcmUoKTt9LGNyZWF0 ZU5hdjpmdW5jdGlvbigpe3ZhciBCPVlBSE9PLndpZGdldC5DYWxlbmRhck5hdmln YXRvcjt2YXIgQz10aGlzLl9kb2M7dmFyIEQ9Qy5jcmVhdGVFbGVtZW50KCJkaXYi KTtELmNsYXNzTmFtZT1CLkNMQVNTRVMuTkFWO3ZhciBBPXRoaXMucmVuZGVyTmF2 Q29udGVudHMoW10pO0QuaW5uZXJIVE1MPUEuam9pbigiIik7dGhpcy5jYWwub0Rv bUNvbnRhaW5lci5hcHBlbmRDaGlsZChEKTt0aGlzLm5hdkVsPUQ7dGhpcy55ZWFy RWw9Qy5nZXRFbGVtZW50QnlJZCh0aGlzLmlkK0IuWUVBUl9TVUZGSVgpO3RoaXMu bW9udGhFbD1DLmdldEVsZW1lbnRCeUlkKHRoaXMuaWQrQi5NT05USF9TVUZGSVgp O3RoaXMuZXJyb3JFbD1DLmdldEVsZW1lbnRCeUlkKHRoaXMuaWQrQi5FUlJPUl9T VUZGSVgpO3RoaXMuc3VibWl0RWw9Qy5nZXRFbGVtZW50QnlJZCh0aGlzLmlkK0Iu U1VCTUlUX1NVRkZJWCk7dGhpcy5jYW5jZWxFbD1DLmdldEVsZW1lbnRCeUlkKHRo aXMuaWQrQi5DQU5DRUxfU1VGRklYKTtpZihZQUhPTy5lbnYudWEuZ2Vja28mJnRo aXMueWVhckVsJiZ0aGlzLnllYXJFbC50eXBlPT0idGV4dCIpe3RoaXMueWVhckVs LnNldEF0dHJpYnV0ZSgiYXV0b2NvbXBsZXRlIiwib2ZmIik7fXRoaXMuX3NldEZp cnN0TGFzdEVsZW1lbnRzKCk7fSxjcmVhdGVNYXNrOmZ1bmN0aW9uKCl7dmFyIEI9 WUFIT08ud2lkZ2V0LkNhbGVuZGFyTmF2aWdhdG9yLkNMQVNTRVM7dmFyIEE9dGhp cy5fZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO0EuY2xhc3NOYW1lPUIuTUFTSzt0 aGlzLmNhbC5vRG9tQ29udGFpbmVyLmFwcGVuZENoaWxkKEEpO3RoaXMubWFza0Vs PUE7fSxfc3luY01hc2s6ZnVuY3Rpb24oKXt2YXIgQj10aGlzLmNhbC5vRG9tQ29u dGFpbmVyO2lmKEImJnRoaXMubWFza0VsKXt2YXIgQT1ZQUhPTy51dGlsLkRvbS5n ZXRSZWdpb24oQik7WUFIT08udXRpbC5Eb20uc2V0U3R5bGUodGhpcy5tYXNrRWws IndpZHRoIixBLnJpZ2h0LUEubGVmdCsicHgiKTtZQUhPTy51dGlsLkRvbS5zZXRT dHlsZSh0aGlzLm1hc2tFbCwiaGVpZ2h0IixBLmJvdHRvbS1BLnRvcCsicHgiKTt9 fSxyZW5kZXJOYXZDb250ZW50czpmdW5jdGlvbihBKXt2YXIgRD1ZQUhPTy53aWRn ZXQuQ2FsZW5kYXJOYXZpZ2F0b3IsRT1ELkNMQVNTRVMsQj1BO0JbQi5sZW5ndGhd PSc8ZGl2IGNsYXNzPSInK0UuTU9OVEgrJyI+Jzt0aGlzLnJlbmRlck1vbnRoKEIp O0JbQi5sZW5ndGhdPSI8L2Rpdj4iO0JbQi5sZW5ndGhdPSc8ZGl2IGNsYXNzPSIn K0UuWUVBUisnIj4nO3RoaXMucmVuZGVyWWVhcihCKTtCW0IubGVuZ3RoXT0iPC9k aXY+IjtCW0IubGVuZ3RoXT0nPGRpdiBjbGFzcz0iJytFLkJVVFRPTlMrJyI+Jzt0 aGlzLnJlbmRlckJ1dHRvbnMoQik7QltCLmxlbmd0aF09IjwvZGl2PiI7QltCLmxl bmd0aF09JzxkaXYgY2xhc3M9IicrRS5FUlJPUisnIiBpZD0iJyt0aGlzLmlkK0Qu RVJST1JfU1VGRklYKyciPjwvZGl2Pic7cmV0dXJuIEI7fSxyZW5kZXJNb250aDpm dW5jdGlvbihEKXt2YXIgRz1ZQUhPTy53aWRnZXQuQ2FsZW5kYXJOYXZpZ2F0b3Is SD1HLkNMQVNTRVM7dmFyIEk9dGhpcy5pZCtHLk1PTlRIX1NVRkZJWCxGPXRoaXMu X19nZXRDZmcoIm1vbnRoRm9ybWF0IiksQT10aGlzLmNhbC5jZmcuZ2V0UHJvcGVy dHkoKEY9PVlBSE9PLndpZGdldC5DYWxlbmRhci5TSE9SVCk/Ik1PTlRIU19TSE9S VCI6Ik1PTlRIU19MT05HIiksRT1EO2lmKEEmJkEubGVuZ3RoPjApe0VbRS5sZW5n dGhdPSc8bGFiZWwgZm9yPSInK0krJyI+JztFW0UubGVuZ3RoXT10aGlzLl9fZ2V0 Q2ZnKCJtb250aCIsdHJ1ZSk7RVtFLmxlbmd0aF09IjwvbGFiZWw+IjtFW0UubGVu Z3RoXT0nPHNlbGVjdCBuYW1lPSInK0krJyIgaWQ9IicrSSsnIiBjbGFzcz0iJytI Lk1PTlRIX0NUUkwrJyI+Jztmb3IodmFyIEI9MDtCPEEubGVuZ3RoO0IrKyl7RVtF Lmxlbmd0aF09JzxvcHRpb24gdmFsdWU9IicrQisnIj4nO0VbRS5sZW5ndGhdPUFb Ql07RVtFLmxlbmd0aF09Ijwvb3B0aW9uPiI7fUVbRS5sZW5ndGhdPSI8L3NlbGVj dD4iO31yZXR1cm4gRTt9LHJlbmRlclllYXI6ZnVuY3Rpb24oQil7dmFyIEU9WUFI T08ud2lkZ2V0LkNhbGVuZGFyTmF2aWdhdG9yLEY9RS5DTEFTU0VTO3ZhciBHPXRo aXMuaWQrRS5ZRUFSX1NVRkZJWCxBPUUuWVJfTUFYX0RJR0lUUyxEPUI7RFtELmxl bmd0aF09JzxsYWJlbCBmb3I9IicrRysnIj4nO0RbRC5sZW5ndGhdPXRoaXMuX19n ZXRDZmcoInllYXIiLHRydWUpO0RbRC5sZW5ndGhdPSI8L2xhYmVsPiI7RFtELmxl bmd0aF09JzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSInK0crJyIgaWQ9IicrRysn IiBjbGFzcz0iJytGLllFQVJfQ1RSTCsnIiBtYXhsZW5ndGg9IicrQSsnIi8+Jzty ZXR1cm4gRDt9LHJlbmRlckJ1dHRvbnM6ZnVuY3Rpb24oQSl7dmFyIEQ9WUFIT08u d2lkZ2V0LkNhbGVuZGFyTmF2aWdhdG9yLkNMQVNTRVM7dmFyIEI9QTtCW0IubGVu Z3RoXT0nPHNwYW4gY2xhc3M9IicrRC5CVVRUT04rIiAiK0QuREVGQVVMVCsnIj4n O0JbQi5sZW5ndGhdPSc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9IicrdGhpcy5p ZCsiX3N1Ym1pdCIrJyI+JztCW0IubGVuZ3RoXT10aGlzLl9fZ2V0Q2ZnKCJzdWJt aXQiLHRydWUpO0JbQi5sZW5ndGhdPSI8L2J1dHRvbj4iO0JbQi5sZW5ndGhdPSI8 L3NwYW4+IjtCW0IubGVuZ3RoXT0nPHNwYW4gY2xhc3M9IicrRC5CVVRUT04rJyI+ JztCW0IubGVuZ3RoXT0nPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSInK3RoaXMu aWQrIl9jYW5jZWwiKyciPic7QltCLmxlbmd0aF09dGhpcy5fX2dldENmZygiY2Fu Y2VsIix0cnVlKTtCW0IubGVuZ3RoXT0iPC9idXR0b24+IjtCW0IubGVuZ3RoXT0i PC9zcGFuPiI7cmV0dXJuIEI7fSxhcHBseUxpc3RlbmVyczpmdW5jdGlvbigpe3Zh ciBCPVlBSE9PLnV0aWwuRXZlbnQ7ZnVuY3Rpb24gQSgpe2lmKHRoaXMudmFsaWRh dGUoKSl7dGhpcy5zZXRZZWFyKHRoaXMuX2dldFllYXJGcm9tVUkoKSk7fX1mdW5j dGlvbiBDKCl7dGhpcy5zZXRNb250aCh0aGlzLl9nZXRNb250aEZyb21VSSgpKTt9 Qi5vbih0aGlzLnN1Ym1pdEVsLCJjbGljayIsdGhpcy5zdWJtaXQsdGhpcyx0cnVl KTtCLm9uKHRoaXMuY2FuY2VsRWwsImNsaWNrIix0aGlzLmNhbmNlbCx0aGlzLHRy dWUpO0Iub24odGhpcy55ZWFyRWwsImJsdXIiLEEsdGhpcyx0cnVlKTtCLm9uKHRo aXMubW9udGhFbCwiY2hhbmdlIixDLHRoaXMsdHJ1ZSk7aWYodGhpcy5fX2lzSUVR dWlya3Mpe1lBSE9PLnV0aWwuRXZlbnQub24odGhpcy5jYWwub0RvbUNvbnRhaW5l ciwicmVzaXplIix0aGlzLl9zeW5jTWFzayx0aGlzLHRydWUpO310aGlzLmFwcGx5 S2V5TGlzdGVuZXJzKCk7fSxwdXJnZUxpc3RlbmVyczpmdW5jdGlvbigpe3ZhciBB PVlBSE9PLnV0aWwuRXZlbnQ7QS5yZW1vdmVMaXN0ZW5lcih0aGlzLnN1Ym1pdEVs LCJjbGljayIsdGhpcy5zdWJtaXQpO0EucmVtb3ZlTGlzdGVuZXIodGhpcy5jYW5j ZWxFbCwiY2xpY2siLHRoaXMuY2FuY2VsKTtBLnJlbW92ZUxpc3RlbmVyKHRoaXMu eWVhckVsLCJibHVyIik7QS5yZW1vdmVMaXN0ZW5lcih0aGlzLm1vbnRoRWwsImNo YW5nZSIpO2lmKHRoaXMuX19pc0lFUXVpcmtzKXtBLnJlbW92ZUxpc3RlbmVyKHRo aXMuY2FsLm9Eb21Db250YWluZXIsInJlc2l6ZSIsdGhpcy5fc3luY01hc2spO310 aGlzLnB1cmdlS2V5TGlzdGVuZXJzKCk7fSxhcHBseUtleUxpc3RlbmVyczpmdW5j dGlvbigpe3ZhciBEPVlBSE9PLnV0aWwuRXZlbnQsQT1ZQUhPTy5lbnYudWE7dmFy IEM9KEEuaWV8fEEud2Via2l0KT8ia2V5ZG93biI6ImtleXByZXNzIjt2YXIgQj0o QS5pZXx8QS5vcGVyYXx8QS53ZWJraXQpPyJrZXlkb3duIjoia2V5cHJlc3MiO0Qu b24odGhpcy55ZWFyRWwsImtleXByZXNzIix0aGlzLl9oYW5kbGVFbnRlcktleSx0 aGlzLHRydWUpO0Qub24odGhpcy55ZWFyRWwsQyx0aGlzLl9oYW5kbGVEaXJlY3Rp b25LZXlzLHRoaXMsdHJ1ZSk7RC5vbih0aGlzLmxhc3RDdHJsLEIsdGhpcy5faGFu ZGxlVGFiS2V5LHRoaXMsdHJ1ZSk7RC5vbih0aGlzLmZpcnN0Q3RybCxCLHRoaXMu X2hhbmRsZVNoaWZ0VGFiS2V5LHRoaXMsdHJ1ZSk7fSxwdXJnZUtleUxpc3RlbmVy czpmdW5jdGlvbigpe3ZhciBEPVlBSE9PLnV0aWwuRXZlbnQsQT1ZQUhPTy5lbnYu dWE7dmFyIEM9KEEuaWV8fEEud2Via2l0KT8ia2V5ZG93biI6ImtleXByZXNzIjt2 YXIgQj0oQS5pZXx8QS5vcGVyYXx8QS53ZWJraXQpPyJrZXlkb3duIjoia2V5cHJl c3MiO0QucmVtb3ZlTGlzdGVuZXIodGhpcy55ZWFyRWwsImtleXByZXNzIix0aGlz Ll9oYW5kbGVFbnRlcktleSk7RC5yZW1vdmVMaXN0ZW5lcih0aGlzLnllYXJFbCxD LHRoaXMuX2hhbmRsZURpcmVjdGlvbktleXMpO0QucmVtb3ZlTGlzdGVuZXIodGhp cy5sYXN0Q3RybCxCLHRoaXMuX2hhbmRsZVRhYktleSk7RC5yZW1vdmVMaXN0ZW5l cih0aGlzLmZpcnN0Q3RybCxCLHRoaXMuX2hhbmRsZVNoaWZ0VGFiS2V5KTt9LHN1 Ym1pdDpmdW5jdGlvbigpe2lmKHRoaXMudmFsaWRhdGUoKSl7dGhpcy5oaWRlKCk7 dGhpcy5zZXRNb250aCh0aGlzLl9nZXRNb250aEZyb21VSSgpKTt0aGlzLnNldFll YXIodGhpcy5fZ2V0WWVhckZyb21VSSgpKTt2YXIgQj10aGlzLmNhbDt2YXIgQT1Z QUhPTy53aWRnZXQuQ2FsZW5kYXJOYXZpZ2F0b3IuVVBEQVRFX0RFTEFZO2lmKEE+ MCl7dmFyIEM9dGhpczt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe0MuX3Vw ZGF0ZShCKTt9LEEpO31lbHNle3RoaXMuX3VwZGF0ZShCKTt9fX0sX3VwZGF0ZTpm dW5jdGlvbihBKXtBLnNldFllYXIodGhpcy5nZXRZZWFyKCkpO0Euc2V0TW9udGgo dGhpcy5nZXRNb250aCgpKTtBLnJlbmRlcigpO30sY2FuY2VsOmZ1bmN0aW9uKCl7 dGhpcy5oaWRlKCk7fSx2YWxpZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2dldFll YXJGcm9tVUkoKSE9PW51bGwpe3RoaXMuY2xlYXJFcnJvcnMoKTtyZXR1cm4gdHJ1 ZTt9ZWxzZXt0aGlzLnNldFllYXJFcnJvcigpO3RoaXMuc2V0RXJyb3IodGhpcy5f X2dldENmZygiaW52YWxpZFllYXIiLHRydWUpKTtyZXR1cm4gZmFsc2U7fX0sc2V0 RXJyb3I6ZnVuY3Rpb24oQSl7aWYodGhpcy5lcnJvckVsKXt0aGlzLmVycm9yRWwu aW5uZXJIVE1MPUE7dGhpcy5fc2hvdyh0aGlzLmVycm9yRWwsdHJ1ZSk7fX0sY2xl YXJFcnJvcjpmdW5jdGlvbigpe2lmKHRoaXMuZXJyb3JFbCl7dGhpcy5lcnJvckVs LmlubmVySFRNTD0iIjt0aGlzLl9zaG93KHRoaXMuZXJyb3JFbCxmYWxzZSk7fX0s c2V0WWVhckVycm9yOmZ1bmN0aW9uKCl7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3Mo dGhpcy55ZWFyRWwsWUFIT08ud2lkZ2V0LkNhbGVuZGFyTmF2aWdhdG9yLkNMQVNT RVMuSU5WQUxJRCk7fSxjbGVhclllYXJFcnJvcjpmdW5jdGlvbigpe1lBSE9PLnV0 aWwuRG9tLnJlbW92ZUNsYXNzKHRoaXMueWVhckVsLFlBSE9PLndpZGdldC5DYWxl bmRhck5hdmlnYXRvci5DTEFTU0VTLklOVkFMSUQpO30sY2xlYXJFcnJvcnM6ZnVu Y3Rpb24oKXt0aGlzLmNsZWFyRXJyb3IoKTt0aGlzLmNsZWFyWWVhckVycm9yKCk7 fSxzZXRJbml0aWFsRm9jdXM6ZnVuY3Rpb24oKXt2YXIgQT10aGlzLnN1Ym1pdEVs LEM9dGhpcy5fX2dldENmZygiaW5pdGlhbEZvY3VzIik7aWYoQyYmQy50b0xvd2Vy Q2FzZSl7Qz1DLnRvTG93ZXJDYXNlKCk7aWYoQz09InllYXIiKXtBPXRoaXMueWVh ckVsO3RyeXt0aGlzLnllYXJFbC5zZWxlY3QoKTt9Y2F0Y2goQil7fX1lbHNle2lm KEM9PSJtb250aCIpe0E9dGhpcy5tb250aEVsO319fWlmKEEmJllBSE9PLmxhbmcu aXNGdW5jdGlvbihBLmZvY3VzKSl7dHJ5e0EuZm9jdXMoKTt9Y2F0Y2goRCl7fX19 LGVyYXNlOmZ1bmN0aW9uKCl7aWYodGhpcy5fX3JlbmRlcmVkKXt0aGlzLnB1cmdl TGlzdGVuZXJzKCk7dGhpcy55ZWFyRWw9bnVsbDt0aGlzLm1vbnRoRWw9bnVsbDt0 aGlzLmVycm9yRWw9bnVsbDt0aGlzLnN1Ym1pdEVsPW51bGw7dGhpcy5jYW5jZWxF bD1udWxsO3RoaXMuZmlyc3RDdHJsPW51bGw7dGhpcy5sYXN0Q3RybD1udWxsO2lm KHRoaXMubmF2RWwpe3RoaXMubmF2RWwuaW5uZXJIVE1MPSIiO312YXIgQj10aGlz Lm5hdkVsLnBhcmVudE5vZGU7aWYoQil7Qi5yZW1vdmVDaGlsZCh0aGlzLm5hdkVs KTt9dGhpcy5uYXZFbD1udWxsO3ZhciBBPXRoaXMubWFza0VsLnBhcmVudE5vZGU7 aWYoQSl7QS5yZW1vdmVDaGlsZCh0aGlzLm1hc2tFbCk7fXRoaXMubWFza0VsPW51 bGw7dGhpcy5fX3JlbmRlcmVkPWZhbHNlO319LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0 aGlzLmVyYXNlKCk7dGhpcy5fZG9jPW51bGw7dGhpcy5jYWw9bnVsbDt0aGlzLmlk PW51bGw7fSxfc2hvdzpmdW5jdGlvbihCLEEpe2lmKEIpe1lBSE9PLnV0aWwuRG9t LnNldFN0eWxlKEIsImRpc3BsYXkiLChBKT8iYmxvY2siOiJub25lIik7fX0sX2dl dE1vbnRoRnJvbVVJOmZ1bmN0aW9uKCl7aWYodGhpcy5tb250aEVsKXtyZXR1cm4g dGhpcy5tb250aEVsLnNlbGVjdGVkSW5kZXg7fWVsc2V7cmV0dXJuIDA7fX0sX2dl dFllYXJGcm9tVUk6ZnVuY3Rpb24oKXt2YXIgQj1ZQUhPTy53aWRnZXQuQ2FsZW5k YXJOYXZpZ2F0b3I7dmFyIEE9bnVsbDtpZih0aGlzLnllYXJFbCl7dmFyIEM9dGhp cy55ZWFyRWwudmFsdWU7Qz1DLnJlcGxhY2UoQi5UUklNLCIkMSIpO2lmKEIuWVJf UEFUVEVSTi50ZXN0KEMpKXtBPXBhcnNlSW50KEMsMTApO319cmV0dXJuIEE7fSxf dXBkYXRlWWVhclVJOmZ1bmN0aW9uKCl7aWYodGhpcy55ZWFyRWwmJnRoaXMuX3ll YXIhPT1udWxsKXt0aGlzLnllYXJFbC52YWx1ZT10aGlzLl95ZWFyO319LF91cGRh dGVNb250aFVJOmZ1bmN0aW9uKCl7aWYodGhpcy5tb250aEVsKXt0aGlzLm1vbnRo RWwuc2VsZWN0ZWRJbmRleD10aGlzLl9tb250aDt9fSxfc2V0Rmlyc3RMYXN0RWxl bWVudHM6ZnVuY3Rpb24oKXt0aGlzLmZpcnN0Q3RybD10aGlzLm1vbnRoRWw7dGhp cy5sYXN0Q3RybD10aGlzLmNhbmNlbEVsO2lmKHRoaXMuX19pc01hYyl7aWYoWUFI T08uZW52LnVhLndlYmtpdCYmWUFIT08uZW52LnVhLndlYmtpdDw0MjApe3RoaXMu Zmlyc3RDdHJsPXRoaXMubW9udGhFbDt0aGlzLmxhc3RDdHJsPXRoaXMueWVhckVs O31pZihZQUhPTy5lbnYudWEuZ2Vja28pe3RoaXMuZmlyc3RDdHJsPXRoaXMueWVh ckVsO3RoaXMubGFzdEN0cmw9dGhpcy55ZWFyRWw7fX19LF9oYW5kbGVFbnRlcktl eTpmdW5jdGlvbihCKXt2YXIgQT1ZQUhPTy51dGlsLktleUxpc3RlbmVyLktFWTtp ZihZQUhPTy51dGlsLkV2ZW50LmdldENoYXJDb2RlKEIpPT1BLkVOVEVSKXtZQUhP Ty51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KEIpO3RoaXMuc3VibWl0KCk7fX0s X2hhbmRsZURpcmVjdGlvbktleXM6ZnVuY3Rpb24oSCl7dmFyIEc9WUFIT08udXRp bC5FdmVudCxBPVlBSE9PLnV0aWwuS2V5TGlzdGVuZXIuS0VZLEQ9WUFIT08ud2lk Z2V0LkNhbGVuZGFyTmF2aWdhdG9yO3ZhciBGPSh0aGlzLnllYXJFbC52YWx1ZSk/ cGFyc2VJbnQodGhpcy55ZWFyRWwudmFsdWUsMTApOm51bGw7aWYoaXNGaW5pdGUo Rikpe3ZhciBCPWZhbHNlO3N3aXRjaChHLmdldENoYXJDb2RlKEgpKXtjYXNlIEEu VVA6dGhpcy55ZWFyRWwudmFsdWU9RitELllSX01JTk9SX0lOQztCPXRydWU7YnJl YWs7Y2FzZSBBLkRPV046dGhpcy55ZWFyRWwudmFsdWU9TWF0aC5tYXgoRi1ELllS X01JTk9SX0lOQywwKTtCPXRydWU7YnJlYWs7Y2FzZSBBLlBBR0VfVVA6dGhpcy55 ZWFyRWwudmFsdWU9RitELllSX01BSk9SX0lOQztCPXRydWU7YnJlYWs7Y2FzZSBB LlBBR0VfRE9XTjp0aGlzLnllYXJFbC52YWx1ZT1NYXRoLm1heChGLUQuWVJfTUFK T1JfSU5DLDApO0I9dHJ1ZTticmVhaztkZWZhdWx0OmJyZWFrO31pZihCKXtHLnBy ZXZlbnREZWZhdWx0KEgpO3RyeXt0aGlzLnllYXJFbC5zZWxlY3QoKTt9Y2F0Y2go Qyl7fX19fSxfaGFuZGxlVGFiS2V5OmZ1bmN0aW9uKEQpe3ZhciBDPVlBSE9PLnV0 aWwuRXZlbnQsQT1ZQUhPTy51dGlsLktleUxpc3RlbmVyLktFWTtpZihDLmdldENo YXJDb2RlKEQpPT1BLlRBQiYmIUQuc2hpZnRLZXkpe3RyeXtDLnByZXZlbnREZWZh dWx0KEQpO3RoaXMuZmlyc3RDdHJsLmZvY3VzKCk7fWNhdGNoKEIpe319fSxfaGFu ZGxlU2hpZnRUYWJLZXk6ZnVuY3Rpb24oRCl7dmFyIEM9WUFIT08udXRpbC5FdmVu dCxBPVlBSE9PLnV0aWwuS2V5TGlzdGVuZXIuS0VZO2lmKEQuc2hpZnRLZXkmJkMu Z2V0Q2hhckNvZGUoRCk9PUEuVEFCKXt0cnl7Qy5wcmV2ZW50RGVmYXVsdChEKTt0 aGlzLmxhc3RDdHJsLmZvY3VzKCk7fWNhdGNoKEIpe319fSxfX2dldENmZzpmdW5j dGlvbihELEIpe3ZhciBDPVlBSE9PLndpZGdldC5DYWxlbmRhck5hdmlnYXRvci5f REVGQVVMVF9DRkc7dmFyIEE9dGhpcy5jYWwuY2ZnLmdldFByb3BlcnR5KCJuYXZp Z2F0b3IiKTtpZihCKXtyZXR1cm4oQSE9PXRydWUmJkEuc3RyaW5ncyYmQS5zdHJp bmdzW0RdKT9BLnN0cmluZ3NbRF06Qy5zdHJpbmdzW0RdO31lbHNle3JldHVybihB IT09dHJ1ZSYmQVtEXSk/QVtEXTpDW0RdO319LF9faXNNYWM6KG5hdmlnYXRvci51 c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtYWNpbnRvc2giKSE9LTEp fTtZQUhPTy5yZWdpc3RlcigiY2FsZW5kYXIiLFlBSE9PLndpZGdldC5DYWxlbmRh cix7dmVyc2lvbjoiMi43LjAiLGJ1aWxkOiIxNzk5In0pO1lBSE9PLmxhbmcuSlNP Tj0oZnVuY3Rpb24oKXt2YXIgbD1ZQUhPTy5sYW5nLF9VTklDT0RFX0VYQ0VQVElP TlM9L1tcdTAwMDBcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1 XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVm ZmYwLVx1ZmZmZl0vZyxfRVNDQVBFUz0vXFwoPzpbIlxcXC9iZm5ydF18dVswLTlh LWZBLUZdezR9KS9nLF9WQUxVRVM9LyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxu dWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLF9CUkFDS0VU Uz0vKD86Xnw6fCwpKD86XHMqXFspKy9nLF9JTlZBTElEPS9eW1xdLDp7fVxzXSok LyxfU1BFQ0lBTF9DSEFSUz0vW1xcXCJceDAwLVx4MWZceDdmLVx4OWZcdTAwYWRc dTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAy OC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZyxfQ0hB UlM9eyJcYiI6IlxcYiIsIlx0IjoiXFx0IiwiXG4iOiJcXG4iLCJcZiI6IlxcZiIs IlxyIjoiXFxyIiwnIic6J1xcIicsIlxcIjoiXFxcXCJ9O2Z1bmN0aW9uIF9yZXZp dmUoZGF0YSxyZXZpdmVyKXt2YXIgd2Fsaz1mdW5jdGlvbihvLGtleSl7dmFyIGss dix2YWx1ZT1vW2tleV07aWYodmFsdWUmJnR5cGVvZiB2YWx1ZT09PSJvYmplY3Qi KXtmb3IoayBpbiB2YWx1ZSl7aWYobC5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSxrKSl7 dj13YWxrKHZhbHVlLGspO2lmKHY9PT11bmRlZmluZWQpe2RlbGV0ZSB2YWx1ZVtr XTt9ZWxzZXt2YWx1ZVtrXT12O319fX1yZXR1cm4gcmV2aXZlci5jYWxsKG8sa2V5 LHZhbHVlKTt9O3JldHVybiB0eXBlb2YgcmV2aXZlcj09PSJmdW5jdGlvbiI/d2Fs ayh7IiI6ZGF0YX0sIiIpOmRhdGE7fWZ1bmN0aW9uIF9jaGFyKGMpe2lmKCFfQ0hB UlNbY10pe19DSEFSU1tjXT0iXFx1IisoIjAwMDAiKygrKGMuY2hhckNvZGVBdCgw KSkpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO31yZXR1cm4gX0NIQVJTW2NdO31m dW5jdGlvbiBfcHJlcGFyZShzKXtyZXR1cm4gcy5yZXBsYWNlKF9VTklDT0RFX0VY Q0VQVElPTlMsX2NoYXIpO31mdW5jdGlvbiBfaXNWYWxpZChzdHIpe3JldHVybiBs LmlzU3RyaW5nKHN0cikmJl9JTlZBTElELnRlc3Qoc3RyLnJlcGxhY2UoX0VTQ0FQ RVMsIkAiKS5yZXBsYWNlKF9WQUxVRVMsIl0iKS5yZXBsYWNlKF9CUkFDS0VUUywi IikpO31mdW5jdGlvbiBfc3RyaW5nKHMpe3JldHVybiciJytzLnJlcGxhY2UoX1NQ RUNJQUxfQ0hBUlMsX2NoYXIpKyciJzt9ZnVuY3Rpb24gX3N0cmluZ2lmeShoLGtl eSxkLHcscHN0YWNrKXt2YXIgbz10eXBlb2Ygdz09PSJmdW5jdGlvbiI/dy5jYWxs KGgsa2V5LGhba2V5XSk6aFtrZXldLGksbGVuLGosayx2LGlzQXJyYXksYTtpZihv IGluc3RhbmNlb2YgRGF0ZSl7bz1sLkpTT04uZGF0ZVRvU3RyaW5nKG8pO31lbHNl e2lmKG8gaW5zdGFuY2VvZiBTdHJpbmd8fG8gaW5zdGFuY2VvZiBCb29sZWFufHxv IGluc3RhbmNlb2YgTnVtYmVyKXtvPW8udmFsdWVPZigpO319c3dpdGNoKHR5cGVv ZiBvKXtjYXNlInN0cmluZyI6cmV0dXJuIF9zdHJpbmcobyk7Y2FzZSJudW1iZXIi OnJldHVybiBpc0Zpbml0ZShvKT9TdHJpbmcobyk6Im51bGwiO2Nhc2UiYm9vbGVh biI6cmV0dXJuIFN0cmluZyhvKTtjYXNlIm9iamVjdCI6aWYobz09PW51bGwpe3Jl dHVybiJudWxsIjt9Zm9yKGk9cHN0YWNrLmxlbmd0aC0xO2k+PTA7LS1pKXtpZihw c3RhY2tbaV09PT1vKXtyZXR1cm4ibnVsbCI7fX1wc3RhY2tbcHN0YWNrLmxlbmd0 aF09bzthPVtdO2lzQXJyYXk9bC5pc0FycmF5KG8pO2lmKGQ+MCl7aWYoaXNBcnJh eSl7Zm9yKGk9by5sZW5ndGgtMTtpPj0wOy0taSl7YVtpXT1fc3RyaW5naWZ5KG8s aSxkLTEsdyxwc3RhY2spfHwibnVsbCI7fX1lbHNle2o9MDtpZihsLmlzQXJyYXko dykpe2ZvcihpPTAsbGVuPXcubGVuZ3RoO2k8bGVuOysraSl7az13W2ldO3Y9X3N0 cmluZ2lmeShvLGssZC0xLHcscHN0YWNrKTtpZih2KXthW2orK109X3N0cmluZyhr KSsiOiIrdjt9fX1lbHNle2ZvcihrIGluIG8pe2lmKHR5cGVvZiBrPT09InN0cmlu ZyImJmwuaGFzT3duUHJvcGVydHkobyxrKSl7dj1fc3RyaW5naWZ5KG8sayxkLTEs dyxwc3RhY2spO2lmKHYpe2FbaisrXT1fc3RyaW5nKGspKyI6Iit2O319fX1hLnNv cnQoKTt9fXBzdGFjay5wb3AoKTtyZXR1cm4gaXNBcnJheT8iWyIrYS5qb2luKCIs IikrIl0iOiJ7IithLmpvaW4oIiwiKSsifSI7fXJldHVybiB1bmRlZmluZWQ7fXJl dHVybntpc1ZhbGlkOmZ1bmN0aW9uKHMpe3JldHVybiBfaXNWYWxpZChfcHJlcGFy ZShzKSk7fSxwYXJzZTpmdW5jdGlvbihzLHJldml2ZXIpe3M9X3ByZXBhcmUocyk7 aWYoX2lzVmFsaWQocykpe3JldHVybiBfcmV2aXZlKGV2YWwoIigiK3MrIikiKSxy ZXZpdmVyKTt9dGhyb3cgbmV3IFN5bnRheEVycm9yKCJwYXJzZUpTT04iKTt9LHN0 cmluZ2lmeTpmdW5jdGlvbihvLHcsZCl7aWYobyE9PXVuZGVmaW5lZCl7aWYobC5p c0FycmF5KHcpKXt3PShmdW5jdGlvbihhKXt2YXIgdW5pcT1bXSxtYXA9e30sdixp LGosbGVuO2ZvcihpPTAsaj0wLGxlbj1hLmxlbmd0aDtpPGxlbjsrK2kpe3Y9YVtp XTtpZih0eXBlb2Ygdj09PSJzdHJpbmciJiZtYXBbdl09PT11bmRlZmluZWQpe3Vu aXFbKG1hcFt2XT1qKyspXT12O319cmV0dXJuIHVuaXE7fSkodyk7fWQ9ZD49MD9k OjEvMDtyZXR1cm4gX3N0cmluZ2lmeSh7IiI6b30sIiIsZCx3LFtdKTt9cmV0dXJu IHVuZGVmaW5lZDt9LGRhdGVUb1N0cmluZzpmdW5jdGlvbihkKXtmdW5jdGlvbiBf emVyb1BhZCh2KXtyZXR1cm4gdjwxMD8iMCIrdjp2O31yZXR1cm4gZC5nZXRVVENG dWxsWWVhcigpKyItIitfemVyb1BhZChkLmdldFVUQ01vbnRoKCkrMSkrIi0iK196 ZXJvUGFkKGQuZ2V0VVRDRGF0ZSgpKSsiVCIrX3plcm9QYWQoZC5nZXRVVENIb3Vy cygpKSsiOiIrX3plcm9QYWQoZC5nZXRVVENNaW51dGVzKCkpKyI6IitfemVyb1Bh ZChkLmdldFVUQ1NlY29uZHMoKSkrIloiO30sc3RyaW5nVG9EYXRlOmZ1bmN0aW9u KHN0cil7aWYoL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KVQoXGR7Mn0pOihcZHsy fSk6KFxkezJ9KVokLy50ZXN0KHN0cikpe3ZhciBkPW5ldyBEYXRlKCk7ZC5zZXRV VENGdWxsWWVhcihSZWdFeHAuJDEsKFJlZ0V4cC4kMnwwKS0xLFJlZ0V4cC4kMyk7 ZC5zZXRVVENIb3VycyhSZWdFeHAuJDQsUmVnRXhwLiQ1LFJlZ0V4cC4kNik7cmV0 dXJuIGQ7fXJldHVybiBzdHI7fX07fSkoKTtZQUhPTy5yZWdpc3RlcigianNvbiIs WUFIT08ubGFuZy5KU09OLHt2ZXJzaW9uOiIyLjcuMCIsYnVpbGQ6IjE3OTkifSk7 WUFIT08udXRpbC5BdHRyaWJ1dGU9ZnVuY3Rpb24oQixBKXtpZihBKXt0aGlzLm93 bmVyPUE7dGhpcy5jb25maWd1cmUoQix0cnVlKTt9fTtZQUhPTy51dGlsLkF0dHJp YnV0ZS5wcm90b3R5cGU9e25hbWU6dW5kZWZpbmVkLHZhbHVlOm51bGwsb3duZXI6 bnVsbCxyZWFkT25seTpmYWxzZSx3cml0ZU9uY2U6ZmFsc2UsX2luaXRpYWxDb25m aWc6bnVsbCxfd3JpdHRlbjpmYWxzZSxtZXRob2Q6bnVsbCxzZXR0ZXI6bnVsbCxn ZXR0ZXI6bnVsbCx2YWxpZGF0b3I6bnVsbCxnZXRWYWx1ZTpmdW5jdGlvbigpe3Zh ciBBPXRoaXMudmFsdWU7aWYodGhpcy5nZXR0ZXIpe0E9dGhpcy5nZXR0ZXIuY2Fs bCh0aGlzLm93bmVyLHRoaXMubmFtZSk7fXJldHVybiBBO30sc2V0VmFsdWU6ZnVu Y3Rpb24oRixCKXt2YXIgRSxBPXRoaXMub3duZXIsQz10aGlzLm5hbWU7dmFyIEQ9 e3R5cGU6QyxwcmV2VmFsdWU6dGhpcy5nZXRWYWx1ZSgpLG5ld1ZhbHVlOkZ9O2lm KHRoaXMucmVhZE9ubHl8fCh0aGlzLndyaXRlT25jZSYmdGhpcy5fd3JpdHRlbikp e3JldHVybiBmYWxzZTt9aWYodGhpcy52YWxpZGF0b3ImJiF0aGlzLnZhbGlkYXRv ci5jYWxsKEEsRikpe3JldHVybiBmYWxzZTt9aWYoIUIpe0U9QS5maXJlQmVmb3Jl Q2hhbmdlRXZlbnQoRCk7aWYoRT09PWZhbHNlKXtyZXR1cm4gZmFsc2U7fX1pZih0 aGlzLnNldHRlcil7Rj10aGlzLnNldHRlci5jYWxsKEEsRix0aGlzLm5hbWUpO2lm KEY9PT11bmRlZmluZWQpe319aWYodGhpcy5tZXRob2Qpe3RoaXMubWV0aG9kLmNh bGwoQSxGLHRoaXMubmFtZSk7fXRoaXMudmFsdWU9Rjt0aGlzLl93cml0dGVuPXRy dWU7RC50eXBlPUM7aWYoIUIpe3RoaXMub3duZXIuZmlyZUNoYW5nZUV2ZW50KEQp O31yZXR1cm4gdHJ1ZTt9LGNvbmZpZ3VyZTpmdW5jdGlvbihCLEMpe0I9Qnx8e307 aWYoQyl7dGhpcy5fd3JpdHRlbj1mYWxzZTt9dGhpcy5faW5pdGlhbENvbmZpZz10 aGlzLl9pbml0aWFsQ29uZmlnfHx7fTtmb3IodmFyIEEgaW4gQil7aWYoQi5oYXNP d25Qcm9wZXJ0eShBKSl7dGhpc1tBXT1CW0FdO2lmKEMpe3RoaXMuX2luaXRpYWxD b25maWdbQV09QltBXTt9fX19LHJlc2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5zZXRWYWx1ZSh0aGlzLl9pbml0aWFsQ29uZmlnLnZhbHVlKTt9LHJlc2V0 Q29uZmlnOmZ1bmN0aW9uKCl7dGhpcy5jb25maWd1cmUodGhpcy5faW5pdGlhbENv bmZpZyx0cnVlKTt9LHJlZnJlc2g6ZnVuY3Rpb24oQSl7dGhpcy5zZXRWYWx1ZSh0 aGlzLnZhbHVlLEEpO319OyhmdW5jdGlvbigpe3ZhciBBPVlBSE9PLnV0aWwuTGFu ZztZQUhPTy51dGlsLkF0dHJpYnV0ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7fTtZQUhP Ty51dGlsLkF0dHJpYnV0ZVByb3ZpZGVyLnByb3RvdHlwZT17X2NvbmZpZ3M6bnVs bCxnZXQ6ZnVuY3Rpb24oQyl7dGhpcy5fY29uZmlncz10aGlzLl9jb25maWdzfHx7 fTt2YXIgQj10aGlzLl9jb25maWdzW0NdO2lmKCFCfHwhdGhpcy5fY29uZmlncy5o YXNPd25Qcm9wZXJ0eShDKSl7cmV0dXJuIG51bGw7fXJldHVybiBCLmdldFZhbHVl KCk7fSxzZXQ6ZnVuY3Rpb24oRCxFLEIpe3RoaXMuX2NvbmZpZ3M9dGhpcy5fY29u Zmlnc3x8e307dmFyIEM9dGhpcy5fY29uZmlnc1tEXTtpZighQyl7cmV0dXJuIGZh bHNlO31yZXR1cm4gQy5zZXRWYWx1ZShFLEIpO30sZ2V0QXR0cmlidXRlS2V5czpm dW5jdGlvbigpe3RoaXMuX2NvbmZpZ3M9dGhpcy5fY29uZmlnczt2YXIgQz1bXSxC O2ZvcihCIGluIHRoaXMuX2NvbmZpZ3Mpe2lmKEEuaGFzT3duUHJvcGVydHkodGhp cy5fY29uZmlncyxCKSYmIUEuaXNVbmRlZmluZWQodGhpcy5fY29uZmlnc1tCXSkp e0NbQy5sZW5ndGhdPUI7fX1yZXR1cm4gQzt9LHNldEF0dHJpYnV0ZXM6ZnVuY3Rp b24oRCxCKXtmb3IodmFyIEMgaW4gRCl7aWYoQS5oYXNPd25Qcm9wZXJ0eShELEMp KXt0aGlzLnNldChDLERbQ10sQik7fX19LHJlc2V0VmFsdWU6ZnVuY3Rpb24oQyxC KXt0aGlzLl9jb25maWdzPXRoaXMuX2NvbmZpZ3N8fHt9O2lmKHRoaXMuX2NvbmZp Z3NbQ10pe3RoaXMuc2V0KEMsdGhpcy5fY29uZmlnc1tDXS5faW5pdGlhbENvbmZp Zy52YWx1ZSxCKTtyZXR1cm4gdHJ1ZTt9cmV0dXJuIGZhbHNlO30scmVmcmVzaDpm dW5jdGlvbihFLEMpe3RoaXMuX2NvbmZpZ3M9dGhpcy5fY29uZmlnc3x8e307dmFy IEY9dGhpcy5fY29uZmlncztFPSgoQS5pc1N0cmluZyhFKSk/W0VdOkUpfHx0aGlz LmdldEF0dHJpYnV0ZUtleXMoKTtmb3IodmFyIEQ9MCxCPUUubGVuZ3RoO0Q8Qjsr K0Qpe2lmKEYuaGFzT3duUHJvcGVydHkoRVtEXSkpe3RoaXMuX2NvbmZpZ3NbRVtE XV0ucmVmcmVzaChDKTt9fX0scmVnaXN0ZXI6ZnVuY3Rpb24oQixDKXt0aGlzLnNl dEF0dHJpYnV0ZUNvbmZpZyhCLEMpO30sZ2V0QXR0cmlidXRlQ29uZmlnOmZ1bmN0 aW9uKEMpe3RoaXMuX2NvbmZpZ3M9dGhpcy5fY29uZmlnc3x8e307dmFyIEI9dGhp cy5fY29uZmlnc1tDXXx8e307dmFyIEQ9e307Zm9yKEMgaW4gQil7aWYoQS5oYXNP d25Qcm9wZXJ0eShCLEMpKXtEW0NdPUJbQ107fX1yZXR1cm4gRDt9LHNldEF0dHJp YnV0ZUNvbmZpZzpmdW5jdGlvbihCLEMsRCl7dGhpcy5fY29uZmlncz10aGlzLl9j b25maWdzfHx7fTtDPUN8fHt9O2lmKCF0aGlzLl9jb25maWdzW0JdKXtDLm5hbWU9 Qjt0aGlzLl9jb25maWdzW0JdPXRoaXMuY3JlYXRlQXR0cmlidXRlKEMpO31lbHNl e3RoaXMuX2NvbmZpZ3NbQl0uY29uZmlndXJlKEMsRCk7fX0sY29uZmlndXJlQXR0 cmlidXRlOmZ1bmN0aW9uKEIsQyxEKXt0aGlzLnNldEF0dHJpYnV0ZUNvbmZpZyhC LEMsRCk7fSxyZXNldEF0dHJpYnV0ZUNvbmZpZzpmdW5jdGlvbihCKXt0aGlzLl9j b25maWdzPXRoaXMuX2NvbmZpZ3N8fHt9O3RoaXMuX2NvbmZpZ3NbQl0ucmVzZXRD b25maWcoKTt9LHN1YnNjcmliZTpmdW5jdGlvbihCLEMpe3RoaXMuX2V2ZW50cz10 aGlzLl9ldmVudHN8fHt9O2lmKCEoQiBpbiB0aGlzLl9ldmVudHMpKXt0aGlzLl9l dmVudHNbQl09dGhpcy5jcmVhdGVFdmVudChCKTt9WUFIT08udXRpbC5FdmVudFBy b3ZpZGVyLnByb3RvdHlwZS5zdWJzY3JpYmUuYXBwbHkodGhpcyxhcmd1bWVudHMp O30sb246ZnVuY3Rpb24oKXt0aGlzLnN1YnNjcmliZS5hcHBseSh0aGlzLGFyZ3Vt ZW50cyk7fSxhZGRMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc3Vic2NyaWJlLmFw cGx5KHRoaXMsYXJndW1lbnRzKTt9LGZpcmVCZWZvcmVDaGFuZ2VFdmVudDpmdW5j dGlvbihDKXt2YXIgQj0iYmVmb3JlIjtCKz1DLnR5cGUuY2hhckF0KDApLnRvVXBw ZXJDYXNlKCkrQy50eXBlLnN1YnN0cigxKSsiQ2hhbmdlIjtDLnR5cGU9QjtyZXR1 cm4gdGhpcy5maXJlRXZlbnQoQy50eXBlLEMpO30sZmlyZUNoYW5nZUV2ZW50OmZ1 bmN0aW9uKEIpe0IudHlwZSs9IkNoYW5nZSI7cmV0dXJuIHRoaXMuZmlyZUV2ZW50 KEIudHlwZSxCKTt9LGNyZWF0ZUF0dHJpYnV0ZTpmdW5jdGlvbihCKXtyZXR1cm4g bmV3IFlBSE9PLnV0aWwuQXR0cmlidXRlKEIsdGhpcyk7fX07WUFIT08uYXVnbWVu dChZQUhPTy51dGlsLkF0dHJpYnV0ZVByb3ZpZGVyLFlBSE9PLnV0aWwuRXZlbnRQ cm92aWRlcik7fSkoKTsoZnVuY3Rpb24oKXt2YXIgQj1ZQUhPTy51dGlsLkRvbSxD PVlBSE9PLnV0aWwuQXR0cmlidXRlUHJvdmlkZXI7dmFyIEE9ZnVuY3Rpb24oRCxF KXt0aGlzLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO307QS5ET01fRVZFTlRT PXsiY2xpY2siOnRydWUsImRibGNsaWNrIjp0cnVlLCJrZXlkb3duIjp0cnVlLCJr ZXlwcmVzcyI6dHJ1ZSwia2V5dXAiOnRydWUsIm1vdXNlZG93biI6dHJ1ZSwibW91 c2Vtb3ZlIjp0cnVlLCJtb3VzZW91dCI6dHJ1ZSwibW91c2VvdmVyIjp0cnVlLCJt b3VzZXVwIjp0cnVlLCJmb2N1cyI6dHJ1ZSwiYmx1ciI6dHJ1ZSwic3VibWl0Ijp0 cnVlLCJjaGFuZ2UiOnRydWV9O0EucHJvdG90eXBlPXtET01fRVZFTlRTOm51bGws REVGQVVMVF9IVE1MX1NFVFRFUjpmdW5jdGlvbihGLEQpe3ZhciBFPXRoaXMuZ2V0 KCJlbGVtZW50Iik7aWYoRSl7RVtEXT1GO319LERFRkFVTFRfSFRNTF9HRVRURVI6 ZnVuY3Rpb24oRCl7dmFyIEU9dGhpcy5nZXQoImVsZW1lbnQiKSxGO2lmKEUpe0Y9 RVtEXTt9cmV0dXJuIEY7fSxhcHBlbmRDaGlsZDpmdW5jdGlvbihEKXtEPUQuZ2V0 P0QuZ2V0KCJlbGVtZW50Iik6RDtyZXR1cm4gdGhpcy5nZXQoImVsZW1lbnQiKS5h cHBlbmRDaGlsZChEKTt9LGdldEVsZW1lbnRzQnlUYWdOYW1lOmZ1bmN0aW9uKEQp e3JldHVybiB0aGlzLmdldCgiZWxlbWVudCIpLmdldEVsZW1lbnRzQnlUYWdOYW1l KEQpO30saGFzQ2hpbGROb2RlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgi ZWxlbWVudCIpLmhhc0NoaWxkTm9kZXMoKTt9LGluc2VydEJlZm9yZTpmdW5jdGlv bihELEUpe0Q9RC5nZXQ/RC5nZXQoImVsZW1lbnQiKTpEO0U9KEUmJkUuZ2V0KT9F LmdldCgiZWxlbWVudCIpOkU7cmV0dXJuIHRoaXMuZ2V0KCJlbGVtZW50IikuaW5z ZXJ0QmVmb3JlKEQsRSk7fSxyZW1vdmVDaGlsZDpmdW5jdGlvbihEKXtEPUQuZ2V0 P0QuZ2V0KCJlbGVtZW50Iik6RDtyZXR1cm4gdGhpcy5nZXQoImVsZW1lbnQiKS5y ZW1vdmVDaGlsZChEKTt9LHJlcGxhY2VDaGlsZDpmdW5jdGlvbihELEUpe0Q9RC5n ZXQ/RC5nZXQoImVsZW1lbnQiKTpEO0U9RS5nZXQ/RS5nZXQoImVsZW1lbnQiKTpF O3JldHVybiB0aGlzLmdldCgiZWxlbWVudCIpLnJlcGxhY2VDaGlsZChELEUpO30s aW5pdEF0dHJpYnV0ZXM6ZnVuY3Rpb24oRCl7fSxhZGRMaXN0ZW5lcjpmdW5jdGlv bihILEcsSSxGKXt2YXIgRT10aGlzLmdldCgiZWxlbWVudCIpfHx0aGlzLmdldCgi aWQiKTtGPUZ8fHRoaXM7dmFyIEQ9dGhpcztpZighdGhpcy5fZXZlbnRzW0hdKXtp ZihFJiZ0aGlzLkRPTV9FVkVOVFNbSF0pe1lBSE9PLnV0aWwuRXZlbnQuYWRkTGlz dGVuZXIoRSxILGZ1bmN0aW9uKEope2lmKEouc3JjRWxlbWVudCYmIUoudGFyZ2V0 KXtKLnRhcmdldD1KLnNyY0VsZW1lbnQ7fUQuZmlyZUV2ZW50KEgsSik7fSxJLEYp O310aGlzLmNyZWF0ZUV2ZW50KEgsdGhpcyk7fXJldHVybiBZQUhPTy51dGlsLkV2 ZW50UHJvdmlkZXIucHJvdG90eXBlLnN1YnNjcmliZS5hcHBseSh0aGlzLGFyZ3Vt ZW50cyk7fSxvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZExpc3RlbmVyLmFw cGx5KHRoaXMsYXJndW1lbnRzKTt9LHN1YnNjcmliZTpmdW5jdGlvbigpe3JldHVy biB0aGlzLmFkZExpc3RlbmVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9LHJlbW92 ZUxpc3RlbmVyOmZ1bmN0aW9uKEUsRCl7cmV0dXJuIHRoaXMudW5zdWJzY3JpYmUu YXBwbHkodGhpcyxhcmd1bWVudHMpO30sYWRkQ2xhc3M6ZnVuY3Rpb24oRCl7Qi5h ZGRDbGFzcyh0aGlzLmdldCgiZWxlbWVudCIpLEQpO30sZ2V0RWxlbWVudHNCeUNs YXNzTmFtZTpmdW5jdGlvbihFLEQpe3JldHVybiBCLmdldEVsZW1lbnRzQnlDbGFz c05hbWUoRSxELHRoaXMuZ2V0KCJlbGVtZW50IikpO30saGFzQ2xhc3M6ZnVuY3Rp b24oRCl7cmV0dXJuIEIuaGFzQ2xhc3ModGhpcy5nZXQoImVsZW1lbnQiKSxEKTt9 LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEQpe3JldHVybiBCLnJlbW92ZUNsYXNzKHRo aXMuZ2V0KCJlbGVtZW50IiksRCk7fSxyZXBsYWNlQ2xhc3M6ZnVuY3Rpb24oRSxE KXtyZXR1cm4gQi5yZXBsYWNlQ2xhc3ModGhpcy5nZXQoImVsZW1lbnQiKSxFLEQp O30sc2V0U3R5bGU6ZnVuY3Rpb24oRSxEKXtyZXR1cm4gQi5zZXRTdHlsZSh0aGlz LmdldCgiZWxlbWVudCIpLEUsRCk7fSxnZXRTdHlsZTpmdW5jdGlvbihEKXtyZXR1 cm4gQi5nZXRTdHlsZSh0aGlzLmdldCgiZWxlbWVudCIpLEQpO30sZmlyZVF1ZXVl OmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5fcXVldWU7Zm9yKHZhciBGPTAsRD1FLmxl bmd0aDtGPEQ7KytGKXt0aGlzW0VbRl1bMF1dLmFwcGx5KHRoaXMsRVtGXVsxXSk7 fX0sYXBwZW5kVG86ZnVuY3Rpb24oRSxGKXtFPShFLmdldCk/RS5nZXQoImVsZW1l bnQiKTpCLmdldChFKTt0aGlzLmZpcmVFdmVudCgiYmVmb3JlQXBwZW5kVG8iLHt0 eXBlOiJiZWZvcmVBcHBlbmRUbyIsdGFyZ2V0OkV9KTtGPShGJiZGLmdldCk/Ri5n ZXQoImVsZW1lbnQiKTpCLmdldChGKTt2YXIgRD10aGlzLmdldCgiZWxlbWVudCIp O2lmKCFEKXtyZXR1cm4gZmFsc2U7fWlmKCFFKXtyZXR1cm4gZmFsc2U7fWlmKEQu cGFyZW50IT1FKXtpZihGKXtFLmluc2VydEJlZm9yZShELEYpO31lbHNle0UuYXBw ZW5kQ2hpbGQoRCk7fX10aGlzLmZpcmVFdmVudCgiYXBwZW5kVG8iLHt0eXBlOiJh cHBlbmRUbyIsdGFyZ2V0OkV9KTtyZXR1cm4gRDt9LGdldDpmdW5jdGlvbihEKXt2 YXIgRj10aGlzLl9jb25maWdzfHx7fSxFPUYuZWxlbWVudDtpZihFJiYhRltEXSYm IVlBSE9PLmxhbmcuaXNVbmRlZmluZWQoRS52YWx1ZVtEXSkpe3RoaXMuX3NldEhU TUxBdHRyQ29uZmlnKEQpO31yZXR1cm4gQy5wcm90b3R5cGUuZ2V0LmNhbGwodGhp cyxEKTt9LHNldEF0dHJpYnV0ZXM6ZnVuY3Rpb24oSixHKXt2YXIgRT17fSxIPXRo aXMuX2NvbmZpZ09yZGVyO2Zvcih2YXIgST0wLEQ9SC5sZW5ndGg7STxEOysrSSl7 aWYoSltIW0ldXSE9PXVuZGVmaW5lZCl7RVtIW0ldXT10cnVlO3RoaXMuc2V0KEhb SV0sSltIW0ldXSxHKTt9fWZvcih2YXIgRiBpbiBKKXtpZihKLmhhc093blByb3Bl cnR5KEYpJiYhRVtGXSl7dGhpcy5zZXQoRixKW0ZdLEcpO319fSxzZXQ6ZnVuY3Rp b24oRSxHLEQpe3ZhciBGPXRoaXMuZ2V0KCJlbGVtZW50Iik7aWYoIUYpe3RoaXMu X3F1ZXVlW3RoaXMuX3F1ZXVlLmxlbmd0aF09WyJzZXQiLGFyZ3VtZW50c107aWYo dGhpcy5fY29uZmlnc1tFXSl7dGhpcy5fY29uZmlnc1tFXS52YWx1ZT1HO31yZXR1 cm47fWlmKCF0aGlzLl9jb25maWdzW0VdJiYhWUFIT08ubGFuZy5pc1VuZGVmaW5l ZChGW0VdKSl7dGhpcy5fc2V0SFRNTEF0dHJDb25maWcoRSk7fXJldHVybiBDLnBy b3RvdHlwZS5zZXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO30sc2V0QXR0cmlidXRl Q29uZmlnOmZ1bmN0aW9uKEQsRSxGKXt0aGlzLl9jb25maWdPcmRlci5wdXNoKEQp O0MucHJvdG90eXBlLnNldEF0dHJpYnV0ZUNvbmZpZy5hcHBseSh0aGlzLGFyZ3Vt ZW50cyk7fSxjcmVhdGVFdmVudDpmdW5jdGlvbihFLEQpe3RoaXMuX2V2ZW50c1tF XT10cnVlO3JldHVybiBDLnByb3RvdHlwZS5jcmVhdGVFdmVudC5hcHBseSh0aGlz LGFyZ3VtZW50cyk7fSxpbml0OmZ1bmN0aW9uKEUsRCl7dGhpcy5faW5pdEVsZW1l bnQoRSxEKTt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgRD10aGlzLmdldCgiZWxl bWVudCIpO1lBSE9PLnV0aWwuRXZlbnQucHVyZ2VFbGVtZW50KEQsdHJ1ZSk7dGhp cy51bnN1YnNjcmliZUFsbCgpO2lmKEQmJkQucGFyZW50Tm9kZSl7RC5wYXJlbnRO b2RlLnJlbW92ZUNoaWxkKEQpO310aGlzLl9xdWV1ZT1bXTt0aGlzLl9ldmVudHM9 e307dGhpcy5fY29uZmlncz17fTt0aGlzLl9jb25maWdPcmRlcj1bXTt9LF9pbml0 RWxlbWVudDpmdW5jdGlvbihGLEUpe3RoaXMuX3F1ZXVlPXRoaXMuX3F1ZXVlfHxb XTt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fTt0aGlzLl9jb25maWdzPXRo aXMuX2NvbmZpZ3N8fHt9O3RoaXMuX2NvbmZpZ09yZGVyPVtdO0U9RXx8e307RS5l bGVtZW50PUUuZWxlbWVudHx8Rnx8bnVsbDt2YXIgSD1mYWxzZTt2YXIgRD1BLkRP TV9FVkVOVFM7dGhpcy5ET01fRVZFTlRTPXRoaXMuRE9NX0VWRU5UU3x8e307Zm9y KHZhciBHIGluIEQpe2lmKEQuaGFzT3duUHJvcGVydHkoRykpe3RoaXMuRE9NX0VW RU5UU1tHXT1EW0ddO319aWYodHlwZW9mIEUuZWxlbWVudD09PSJzdHJpbmciKXt0 aGlzLl9zZXRIVE1MQXR0ckNvbmZpZygiaWQiLHt2YWx1ZTpFLmVsZW1lbnR9KTt9 aWYoQi5nZXQoRS5lbGVtZW50KSl7SD10cnVlO3RoaXMuX2luaXRIVE1MRWxlbWVu dChFKTt0aGlzLl9pbml0Q29udGVudChFKTt9WUFIT08udXRpbC5FdmVudC5vbkF2 YWlsYWJsZShFLmVsZW1lbnQsZnVuY3Rpb24oKXtpZighSCl7dGhpcy5faW5pdEhU TUxFbGVtZW50KEUpO310aGlzLmZpcmVFdmVudCgiYXZhaWxhYmxlIix7dHlwZToi YXZhaWxhYmxlIix0YXJnZXQ6Qi5nZXQoRS5lbGVtZW50KX0pO30sdGhpcyx0cnVl KTtZQUhPTy51dGlsLkV2ZW50Lm9uQ29udGVudFJlYWR5KEUuZWxlbWVudCxmdW5j dGlvbigpe2lmKCFIKXt0aGlzLl9pbml0Q29udGVudChFKTt9dGhpcy5maXJlRXZl bnQoImNvbnRlbnRSZWFkeSIse3R5cGU6ImNvbnRlbnRSZWFkeSIsdGFyZ2V0OkIu Z2V0KEUuZWxlbWVudCl9KTt9LHRoaXMsdHJ1ZSk7fSxfaW5pdEhUTUxFbGVtZW50 OmZ1bmN0aW9uKEQpe3RoaXMuc2V0QXR0cmlidXRlQ29uZmlnKCJlbGVtZW50Iix7 dmFsdWU6Qi5nZXQoRC5lbGVtZW50KSxyZWFkT25seTp0cnVlfSk7fSxfaW5pdENv bnRlbnQ6ZnVuY3Rpb24oRCl7dGhpcy5pbml0QXR0cmlidXRlcyhEKTt0aGlzLnNl dEF0dHJpYnV0ZXMoRCx0cnVlKTt0aGlzLmZpcmVRdWV1ZSgpO30sX3NldEhUTUxB dHRyQ29uZmlnOmZ1bmN0aW9uKEQsRil7dmFyIEU9dGhpcy5nZXQoImVsZW1lbnQi KTtGPUZ8fHt9O0YubmFtZT1EO0Yuc2V0dGVyPUYuc2V0dGVyfHx0aGlzLkRFRkFV TFRfSFRNTF9TRVRURVI7Ri5nZXR0ZXI9Ri5nZXR0ZXJ8fHRoaXMuREVGQVVMVF9I VE1MX0dFVFRFUjtGLnZhbHVlPUYudmFsdWV8fEVbRF07dGhpcy5fY29uZmlnc1tE XT1uZXcgWUFIT08udXRpbC5BdHRyaWJ1dGUoRix0aGlzKTt9fTtZQUhPTy5hdWdt ZW50KEEsQyk7WUFIT08udXRpbC5FbGVtZW50PUE7fSkoKTtZQUhPTy5yZWdpc3Rl cigiZWxlbWVudCIsWUFIT08udXRpbC5FbGVtZW50LHt2ZXJzaW9uOiIyLjcuMCIs YnVpbGQ6IjE3OTkifSk7KGZ1bmN0aW9uKCl7dmFyIGxhbmc9WUFIT08ubGFuZyx1 dGlsPVlBSE9PLnV0aWwsRXY9dXRpbC5FdmVudDt1dGlsLkRhdGFTb3VyY2VCYXNl PWZ1bmN0aW9uKG9MaXZlRGF0YSxvQ29uZmlncyl7aWYob0xpdmVEYXRhPT09bnVs bHx8b0xpdmVEYXRhPT09dW5kZWZpbmVkKXtyZXR1cm47fXRoaXMubGl2ZURhdGE9 b0xpdmVEYXRhO3RoaXMuX29RdWV1ZT17aW50ZXJ2YWw6bnVsbCxjb25uOm51bGws cmVxdWVzdHM6W119O3RoaXMucmVzcG9uc2VTY2hlbWE9e307aWYob0NvbmZpZ3Mm JihvQ29uZmlncy5jb25zdHJ1Y3Rvcj09T2JqZWN0KSl7Zm9yKHZhciBzQ29uZmln IGluIG9Db25maWdzKXtpZihzQ29uZmlnKXt0aGlzW3NDb25maWddPW9Db25maWdz W3NDb25maWddO319fXZhciBtYXhDYWNoZUVudHJpZXM9dGhpcy5tYXhDYWNoZUVu dHJpZXM7aWYoIWxhbmcuaXNOdW1iZXIobWF4Q2FjaGVFbnRyaWVzKXx8KG1heENh Y2hlRW50cmllczwwKSl7bWF4Q2FjaGVFbnRyaWVzPTA7fXRoaXMuX2FJbnRlcnZh bHM9W107dGhpcy5jcmVhdGVFdmVudCgiY2FjaGVSZXF1ZXN0RXZlbnQiKTt0aGlz LmNyZWF0ZUV2ZW50KCJjYWNoZVJlc3BvbnNlRXZlbnQiKTt0aGlzLmNyZWF0ZUV2 ZW50KCJyZXF1ZXN0RXZlbnQiKTt0aGlzLmNyZWF0ZUV2ZW50KCJyZXNwb25zZUV2 ZW50Iik7dGhpcy5jcmVhdGVFdmVudCgicmVzcG9uc2VQYXJzZUV2ZW50Iik7dGhp cy5jcmVhdGVFdmVudCgicmVzcG9uc2VDYWNoZUV2ZW50Iik7dGhpcy5jcmVhdGVF dmVudCgiZGF0YUVycm9yRXZlbnQiKTt0aGlzLmNyZWF0ZUV2ZW50KCJjYWNoZUZs dXNoRXZlbnQiKTt2YXIgRFM9dXRpbC5EYXRhU291cmNlQmFzZTt0aGlzLl9zTmFt ZT0iRGF0YVNvdXJjZSBpbnN0YW5jZSIrRFMuX25JbmRleDtEUy5fbkluZGV4Kys7 fTt2YXIgRFM9dXRpbC5EYXRhU291cmNlQmFzZTtsYW5nLmF1Z21lbnRPYmplY3Qo RFMse1RZUEVfVU5LTk9XTjotMSxUWVBFX0pTQVJSQVk6MCxUWVBFX0pTRlVOQ1RJ T046MSxUWVBFX1hIUjoyLFRZUEVfSlNPTjozLFRZUEVfWE1MOjQsVFlQRV9URVhU OjUsVFlQRV9IVE1MVEFCTEU6NixUWVBFX1NDUklQVE5PREU6NyxUWVBFX0xPQ0FM OjgsRVJST1JfREFUQUlOVkFMSUQ6IkludmFsaWQgZGF0YSIsRVJST1JfREFUQU5V TEw6Ik51bGwgZGF0YSIsX25JbmRleDowLF9uVHJhbnNhY3Rpb25JZDowLGlzc3Vl Q2FsbGJhY2s6ZnVuY3Rpb24oY2FsbGJhY2sscGFyYW1zLGVycm9yLHNjb3BlKXtp ZihsYW5nLmlzRnVuY3Rpb24oY2FsbGJhY2spKXtjYWxsYmFjay5hcHBseShzY29w ZSxwYXJhbXMpO31lbHNle2lmKGxhbmcuaXNPYmplY3QoY2FsbGJhY2spKXtzY29w ZT1jYWxsYmFjay5zY29wZXx8c2NvcGV8fHdpbmRvdzt2YXIgY2FsbGJhY2tGdW5j PWNhbGxiYWNrLnN1Y2Nlc3M7aWYoZXJyb3Ipe2NhbGxiYWNrRnVuYz1jYWxsYmFj ay5mYWlsdXJlO31pZihjYWxsYmFja0Z1bmMpe2NhbGxiYWNrRnVuYy5hcHBseShz Y29wZSxwYXJhbXMuY29uY2F0KFtjYWxsYmFjay5hcmd1bWVudF0pKTt9fX19LHBh cnNlU3RyaW5nOmZ1bmN0aW9uKG9EYXRhKXtpZighbGFuZy5pc1ZhbHVlKG9EYXRh KSl7cmV0dXJuIG51bGw7fXZhciBzdHJpbmc9b0RhdGErIiI7aWYobGFuZy5pc1N0 cmluZyhzdHJpbmcpKXtyZXR1cm4gc3RyaW5nO31lbHNle3JldHVybiBudWxsO319 LHBhcnNlTnVtYmVyOmZ1bmN0aW9uKG9EYXRhKXtpZighbGFuZy5pc1ZhbHVlKG9E YXRhKXx8KG9EYXRhPT09IiIpKXtyZXR1cm4gbnVsbDt9dmFyIG51bWJlcj1vRGF0 YSoxO2lmKGxhbmcuaXNOdW1iZXIobnVtYmVyKSl7cmV0dXJuIG51bWJlcjt9ZWxz ZXtyZXR1cm4gbnVsbDt9fSxjb252ZXJ0TnVtYmVyOmZ1bmN0aW9uKG9EYXRhKXty ZXR1cm4gRFMucGFyc2VOdW1iZXIob0RhdGEpO30scGFyc2VEYXRlOmZ1bmN0aW9u KG9EYXRhKXt2YXIgZGF0ZT1udWxsO2lmKCEob0RhdGEgaW5zdGFuY2VvZiBEYXRl KSl7ZGF0ZT1uZXcgRGF0ZShvRGF0YSk7fWVsc2V7cmV0dXJuIG9EYXRhO31pZihk YXRlIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuIGRhdGU7fWVsc2V7cmV0dXJuIG51 bGw7fX0sY29udmVydERhdGU6ZnVuY3Rpb24ob0RhdGEpe3JldHVybiBEUy5wYXJz ZURhdGUob0RhdGEpO319KTtEUy5QYXJzZXI9e3N0cmluZzpEUy5wYXJzZVN0cmlu ZyxudW1iZXI6RFMucGFyc2VOdW1iZXIsZGF0ZTpEUy5wYXJzZURhdGV9O0RTLnBy b3RvdHlwZT17X3NOYW1lOm51bGwsX2FDYWNoZTpudWxsLF9vUXVldWU6bnVsbCxf YUludGVydmFsczpudWxsLG1heENhY2hlRW50cmllczowLGxpdmVEYXRhOm51bGws ZGF0YVR5cGU6RFMuVFlQRV9VTktOT1dOLHJlc3BvbnNlVHlwZTpEUy5UWVBFX1VO S05PV04scmVzcG9uc2VTY2hlbWE6bnVsbCx0b1N0cmluZzpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLl9zTmFtZTt9LGdldENhY2hlZFJlc3BvbnNlOmZ1bmN0aW9uKG9S ZXF1ZXN0LG9DYWxsYmFjayxvQ2FsbGVyKXt2YXIgYUNhY2hlPXRoaXMuX2FDYWNo ZTtpZih0aGlzLm1heENhY2hlRW50cmllcz4wKXtpZighYUNhY2hlKXt0aGlzLl9h Q2FjaGU9W107fWVsc2V7dmFyIG5DYWNoZUxlbmd0aD1hQ2FjaGUubGVuZ3RoO2lm KG5DYWNoZUxlbmd0aD4wKXt2YXIgb1Jlc3BvbnNlPW51bGw7dGhpcy5maXJlRXZl bnQoImNhY2hlUmVxdWVzdEV2ZW50Iix7cmVxdWVzdDpvUmVxdWVzdCxjYWxsYmFj azpvQ2FsbGJhY2ssY2FsbGVyOm9DYWxsZXJ9KTtmb3IodmFyIGk9bkNhY2hlTGVu Z3RoLTE7aT49MDtpLS0pe3ZhciBvQ2FjaGVFbGVtPWFDYWNoZVtpXTtpZih0aGlz LmlzQ2FjaGVIaXQob1JlcXVlc3Qsb0NhY2hlRWxlbS5yZXF1ZXN0KSl7b1Jlc3Bv bnNlPW9DYWNoZUVsZW0ucmVzcG9uc2U7dGhpcy5maXJlRXZlbnQoImNhY2hlUmVz cG9uc2VFdmVudCIse3JlcXVlc3Q6b1JlcXVlc3QscmVzcG9uc2U6b1Jlc3BvbnNl LGNhbGxiYWNrOm9DYWxsYmFjayxjYWxsZXI6b0NhbGxlcn0pO2lmKGk8bkNhY2hl TGVuZ3RoLTEpe2FDYWNoZS5zcGxpY2UoaSwxKTt0aGlzLmFkZFRvQ2FjaGUob1Jl cXVlc3Qsb1Jlc3BvbnNlKTt9b1Jlc3BvbnNlLmNhY2hlZD10cnVlO2JyZWFrO319 cmV0dXJuIG9SZXNwb25zZTt9fX1lbHNle2lmKGFDYWNoZSl7dGhpcy5fYUNhY2hl PW51bGw7fX1yZXR1cm4gbnVsbDt9LGlzQ2FjaGVIaXQ6ZnVuY3Rpb24ob1JlcXVl c3Qsb0NhY2hlZFJlcXVlc3Qpe3JldHVybihvUmVxdWVzdD09PW9DYWNoZWRSZXF1 ZXN0KTt9LGFkZFRvQ2FjaGU6ZnVuY3Rpb24ob1JlcXVlc3Qsb1Jlc3BvbnNlKXt2 YXIgYUNhY2hlPXRoaXMuX2FDYWNoZTtpZighYUNhY2hlKXtyZXR1cm47fXdoaWxl KGFDYWNoZS5sZW5ndGg+PXRoaXMubWF4Q2FjaGVFbnRyaWVzKXthQ2FjaGUuc2hp ZnQoKTt9dmFyIG9DYWNoZUVsZW09e3JlcXVlc3Q6b1JlcXVlc3QscmVzcG9uc2U6 b1Jlc3BvbnNlfTthQ2FjaGVbYUNhY2hlLmxlbmd0aF09b0NhY2hlRWxlbTt0aGlz LmZpcmVFdmVudCgicmVzcG9uc2VDYWNoZUV2ZW50Iix7cmVxdWVzdDpvUmVxdWVz dCxyZXNwb25zZTpvUmVzcG9uc2V9KTt9LGZsdXNoQ2FjaGU6ZnVuY3Rpb24oKXtp Zih0aGlzLl9hQ2FjaGUpe3RoaXMuX2FDYWNoZT1bXTt0aGlzLmZpcmVFdmVudCgi Y2FjaGVGbHVzaEV2ZW50Iik7fX0sc2V0SW50ZXJ2YWw6ZnVuY3Rpb24obk1zZWMs b1JlcXVlc3Qsb0NhbGxiYWNrLG9DYWxsZXIpe2lmKGxhbmcuaXNOdW1iZXIobk1z ZWMpJiYobk1zZWM+PTApKXt2YXIgb1NlbGY9dGhpczt2YXIgbklkPXNldEludGVy dmFsKGZ1bmN0aW9uKCl7b1NlbGYubWFrZUNvbm5lY3Rpb24ob1JlcXVlc3Qsb0Nh bGxiYWNrLG9DYWxsZXIpO30sbk1zZWMpO3RoaXMuX2FJbnRlcnZhbHMucHVzaChu SWQpO3JldHVybiBuSWQ7fWVsc2V7fX0sY2xlYXJJbnRlcnZhbDpmdW5jdGlvbihu SWQpe3ZhciB0cmFja2VyPXRoaXMuX2FJbnRlcnZhbHN8fFtdO2Zvcih2YXIgaT10 cmFja2VyLmxlbmd0aC0xO2k+LTE7aS0tKXtpZih0cmFja2VyW2ldPT09bklkKXt0 cmFja2VyLnNwbGljZShpLDEpO2NsZWFySW50ZXJ2YWwobklkKTt9fX0sY2xlYXJB bGxJbnRlcnZhbHM6ZnVuY3Rpb24oKXt2YXIgdHJhY2tlcj10aGlzLl9hSW50ZXJ2 YWxzfHxbXTtmb3IodmFyIGk9dHJhY2tlci5sZW5ndGgtMTtpPi0xO2ktLSl7Y2xl YXJJbnRlcnZhbCh0cmFja2VyW2ldKTt9dHJhY2tlcj1bXTt9LHNlbmRSZXF1ZXN0 OmZ1bmN0aW9uKG9SZXF1ZXN0LG9DYWxsYmFjayxvQ2FsbGVyKXt2YXIgb0NhY2hl ZFJlc3BvbnNlPXRoaXMuZ2V0Q2FjaGVkUmVzcG9uc2Uob1JlcXVlc3Qsb0NhbGxi YWNrLG9DYWxsZXIpO2lmKG9DYWNoZWRSZXNwb25zZSl7RFMuaXNzdWVDYWxsYmFj ayhvQ2FsbGJhY2ssW29SZXF1ZXN0LG9DYWNoZWRSZXNwb25zZV0sZmFsc2Usb0Nh bGxlcik7cmV0dXJuIG51bGw7fXJldHVybiB0aGlzLm1ha2VDb25uZWN0aW9uKG9S ZXF1ZXN0LG9DYWxsYmFjayxvQ2FsbGVyKTt9LG1ha2VDb25uZWN0aW9uOmZ1bmN0 aW9uKG9SZXF1ZXN0LG9DYWxsYmFjayxvQ2FsbGVyKXt2YXIgdElkPURTLl9uVHJh bnNhY3Rpb25JZCsrO3RoaXMuZmlyZUV2ZW50KCJyZXF1ZXN0RXZlbnQiLHt0SWQ6 dElkLHJlcXVlc3Q6b1JlcXVlc3QsY2FsbGJhY2s6b0NhbGxiYWNrLGNhbGxlcjpv Q2FsbGVyfSk7dmFyIG9SYXdSZXNwb25zZT10aGlzLmxpdmVEYXRhO3RoaXMuaGFu ZGxlUmVzcG9uc2Uob1JlcXVlc3Qsb1Jhd1Jlc3BvbnNlLG9DYWxsYmFjayxvQ2Fs bGVyLHRJZCk7cmV0dXJuIHRJZDt9LGhhbmRsZVJlc3BvbnNlOmZ1bmN0aW9uKG9S ZXF1ZXN0LG9SYXdSZXNwb25zZSxvQ2FsbGJhY2ssb0NhbGxlcix0SWQpe3RoaXMu ZmlyZUV2ZW50KCJyZXNwb25zZUV2ZW50Iix7dElkOnRJZCxyZXF1ZXN0Om9SZXF1 ZXN0LHJlc3BvbnNlOm9SYXdSZXNwb25zZSxjYWxsYmFjazpvQ2FsbGJhY2ssY2Fs bGVyOm9DYWxsZXJ9KTt2YXIgeGhyPSh0aGlzLmRhdGFUeXBlPT1EUy5UWVBFX1hI Uik/dHJ1ZTpmYWxzZTt2YXIgb1BhcnNlZFJlc3BvbnNlPW51bGw7dmFyIG9GdWxs UmVzcG9uc2U9b1Jhd1Jlc3BvbnNlO2lmKHRoaXMucmVzcG9uc2VUeXBlPT09RFMu VFlQRV9VTktOT1dOKXt2YXIgY3R5cGU9KG9SYXdSZXNwb25zZSYmb1Jhd1Jlc3Bv bnNlLmdldFJlc3BvbnNlSGVhZGVyKT9vUmF3UmVzcG9uc2UuZ2V0UmVzcG9uc2VI ZWFkZXJbIkNvbnRlbnQtVHlwZSJdOm51bGw7aWYoY3R5cGUpe2lmKGN0eXBlLmlu ZGV4T2YoInRleHQveG1sIik+LTEpe3RoaXMucmVzcG9uc2VUeXBlPURTLlRZUEVf WE1MO31lbHNle2lmKGN0eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4t MSl7dGhpcy5yZXNwb25zZVR5cGU9RFMuVFlQRV9KU09OO31lbHNle2lmKGN0eXBl LmluZGV4T2YoInRleHQvcGxhaW4iKT4tMSl7dGhpcy5yZXNwb25zZVR5cGU9RFMu VFlQRV9URVhUO319fX1lbHNle2lmKFlBSE9PLmxhbmcuaXNBcnJheShvUmF3UmVz cG9uc2UpKXt0aGlzLnJlc3BvbnNlVHlwZT1EUy5UWVBFX0pTQVJSQVk7fWVsc2V7 aWYob1Jhd1Jlc3BvbnNlJiZvUmF3UmVzcG9uc2Uubm9kZVR5cGUmJm9SYXdSZXNw b25zZS5ub2RlVHlwZT09OSl7dGhpcy5yZXNwb25zZVR5cGU9RFMuVFlQRV9YTUw7 fWVsc2V7aWYob1Jhd1Jlc3BvbnNlJiZvUmF3UmVzcG9uc2Uubm9kZU5hbWUmJihv UmF3UmVzcG9uc2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09InRhYmxlIikpe3Ro aXMucmVzcG9uc2VUeXBlPURTLlRZUEVfSFRNTFRBQkxFO31lbHNle2lmKFlBSE9P LmxhbmcuaXNPYmplY3Qob1Jhd1Jlc3BvbnNlKSl7dGhpcy5yZXNwb25zZVR5cGU9 RFMuVFlQRV9KU09OO31lbHNle2lmKFlBSE9PLmxhbmcuaXNTdHJpbmcob1Jhd1Jl c3BvbnNlKSl7dGhpcy5yZXNwb25zZVR5cGU9RFMuVFlQRV9URVhUO319fX19fX1z d2l0Y2godGhpcy5yZXNwb25zZVR5cGUpe2Nhc2UgRFMuVFlQRV9KU0FSUkFZOmlm KHhociYmb1Jhd1Jlc3BvbnNlJiZvUmF3UmVzcG9uc2UucmVzcG9uc2VUZXh0KXtv RnVsbFJlc3BvbnNlPW9SYXdSZXNwb25zZS5yZXNwb25zZVRleHQ7fXRyeXtpZihs YW5nLmlzU3RyaW5nKG9GdWxsUmVzcG9uc2UpKXt2YXIgcGFyc2VBcmdzPVtvRnVs bFJlc3BvbnNlXS5jb25jYXQodGhpcy5wYXJzZUpTT05BcmdzKTtpZihsYW5nLkpT T04pe29GdWxsUmVzcG9uc2U9bGFuZy5KU09OLnBhcnNlLmFwcGx5KGxhbmcuSlNP TixwYXJzZUFyZ3MpO31lbHNle2lmKHdpbmRvdy5KU09OJiZKU09OLnBhcnNlKXtv RnVsbFJlc3BvbnNlPUpTT04ucGFyc2UuYXBwbHkoSlNPTixwYXJzZUFyZ3MpO31l bHNle2lmKG9GdWxsUmVzcG9uc2UucGFyc2VKU09OKXtvRnVsbFJlc3BvbnNlPW9G dWxsUmVzcG9uc2UucGFyc2VKU09OLmFwcGx5KG9GdWxsUmVzcG9uc2UscGFyc2VB cmdzLnNsaWNlKDEpKTt9ZWxzZXt3aGlsZShvRnVsbFJlc3BvbnNlLmxlbmd0aD4w JiYob0Z1bGxSZXNwb25zZS5jaGFyQXQoMCkhPSJ7IikmJihvRnVsbFJlc3BvbnNl LmNoYXJBdCgwKSE9IlsiKSl7b0Z1bGxSZXNwb25zZT1vRnVsbFJlc3BvbnNlLnN1 YnN0cmluZygxLG9GdWxsUmVzcG9uc2UubGVuZ3RoKTt9aWYob0Z1bGxSZXNwb25z ZS5sZW5ndGg+MCl7dmFyIGFycmF5RW5kPU1hdGgubWF4KG9GdWxsUmVzcG9uc2Uu bGFzdEluZGV4T2YoIl0iKSxvRnVsbFJlc3BvbnNlLmxhc3RJbmRleE9mKCJ9Iikp O29GdWxsUmVzcG9uc2U9b0Z1bGxSZXNwb25zZS5zdWJzdHJpbmcoMCxhcnJheUVu ZCsxKTtvRnVsbFJlc3BvbnNlPWV2YWwoIigiK29GdWxsUmVzcG9uc2UrIikiKTt9 fX19fX1jYXRjaChlMSl7fW9GdWxsUmVzcG9uc2U9dGhpcy5kb0JlZm9yZVBhcnNl RGF0YShvUmVxdWVzdCxvRnVsbFJlc3BvbnNlLG9DYWxsYmFjayk7b1BhcnNlZFJl c3BvbnNlPXRoaXMucGFyc2VBcnJheURhdGEob1JlcXVlc3Qsb0Z1bGxSZXNwb25z ZSk7YnJlYWs7Y2FzZSBEUy5UWVBFX0pTT046aWYoeGhyJiZvUmF3UmVzcG9uc2Um Jm9SYXdSZXNwb25zZS5yZXNwb25zZVRleHQpe29GdWxsUmVzcG9uc2U9b1Jhd1Jl c3BvbnNlLnJlc3BvbnNlVGV4dDt9dHJ5e2lmKGxhbmcuaXNTdHJpbmcob0Z1bGxS ZXNwb25zZSkpe3ZhciBwYXJzZUFyZ3M9W29GdWxsUmVzcG9uc2VdLmNvbmNhdCh0 aGlzLnBhcnNlSlNPTkFyZ3MpO2lmKGxhbmcuSlNPTil7b0Z1bGxSZXNwb25zZT1s YW5nLkpTT04ucGFyc2UuYXBwbHkobGFuZy5KU09OLHBhcnNlQXJncyk7fWVsc2V7 aWYod2luZG93LkpTT04mJkpTT04ucGFyc2Upe29GdWxsUmVzcG9uc2U9SlNPTi5w YXJzZS5hcHBseShKU09OLHBhcnNlQXJncyk7fWVsc2V7aWYob0Z1bGxSZXNwb25z ZS5wYXJzZUpTT04pe29GdWxsUmVzcG9uc2U9b0Z1bGxSZXNwb25zZS5wYXJzZUpT T04uYXBwbHkob0Z1bGxSZXNwb25zZSxwYXJzZUFyZ3Muc2xpY2UoMSkpO31lbHNl e3doaWxlKG9GdWxsUmVzcG9uc2UubGVuZ3RoPjAmJihvRnVsbFJlc3BvbnNlLmNo YXJBdCgwKSE9InsiKSYmKG9GdWxsUmVzcG9uc2UuY2hhckF0KDApIT0iWyIpKXtv RnVsbFJlc3BvbnNlPW9GdWxsUmVzcG9uc2Uuc3Vic3RyaW5nKDEsb0Z1bGxSZXNw b25zZS5sZW5ndGgpO31pZihvRnVsbFJlc3BvbnNlLmxlbmd0aD4wKXt2YXIgb2Jq RW5kPU1hdGgubWF4KG9GdWxsUmVzcG9uc2UubGFzdEluZGV4T2YoIl0iKSxvRnVs bFJlc3BvbnNlLmxhc3RJbmRleE9mKCJ9IikpO29GdWxsUmVzcG9uc2U9b0Z1bGxS ZXNwb25zZS5zdWJzdHJpbmcoMCxvYmpFbmQrMSk7b0Z1bGxSZXNwb25zZT1ldmFs KCIoIitvRnVsbFJlc3BvbnNlKyIpIik7fX19fX19Y2F0Y2goZSl7fW9GdWxsUmVz cG9uc2U9dGhpcy5kb0JlZm9yZVBhcnNlRGF0YShvUmVxdWVzdCxvRnVsbFJlc3Bv bnNlLG9DYWxsYmFjayk7b1BhcnNlZFJlc3BvbnNlPXRoaXMucGFyc2VKU09ORGF0 YShvUmVxdWVzdCxvRnVsbFJlc3BvbnNlKTticmVhaztjYXNlIERTLlRZUEVfSFRN TFRBQkxFOmlmKHhociYmb1Jhd1Jlc3BvbnNlLnJlc3BvbnNlVGV4dCl7dmFyIGVs PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2VsLmlubmVySFRNTD1vUmF3 UmVzcG9uc2UucmVzcG9uc2VUZXh0O29GdWxsUmVzcG9uc2U9ZWwuZ2V0RWxlbWVu dHNCeVRhZ05hbWUoInRhYmxlIilbMF07fW9GdWxsUmVzcG9uc2U9dGhpcy5kb0Jl Zm9yZVBhcnNlRGF0YShvUmVxdWVzdCxvRnVsbFJlc3BvbnNlLG9DYWxsYmFjayk7 b1BhcnNlZFJlc3BvbnNlPXRoaXMucGFyc2VIVE1MVGFibGVEYXRhKG9SZXF1ZXN0 LG9GdWxsUmVzcG9uc2UpO2JyZWFrO2Nhc2UgRFMuVFlQRV9YTUw6aWYoeGhyJiZv UmF3UmVzcG9uc2UucmVzcG9uc2VYTUwpe29GdWxsUmVzcG9uc2U9b1Jhd1Jlc3Bv bnNlLnJlc3BvbnNlWE1MO31vRnVsbFJlc3BvbnNlPXRoaXMuZG9CZWZvcmVQYXJz ZURhdGEob1JlcXVlc3Qsb0Z1bGxSZXNwb25zZSxvQ2FsbGJhY2spO29QYXJzZWRS ZXNwb25zZT10aGlzLnBhcnNlWE1MRGF0YShvUmVxdWVzdCxvRnVsbFJlc3BvbnNl KTticmVhaztjYXNlIERTLlRZUEVfVEVYVDppZih4aHImJmxhbmcuaXNTdHJpbmco b1Jhd1Jlc3BvbnNlLnJlc3BvbnNlVGV4dCkpe29GdWxsUmVzcG9uc2U9b1Jhd1Jl c3BvbnNlLnJlc3BvbnNlVGV4dDt9b0Z1bGxSZXNwb25zZT10aGlzLmRvQmVmb3Jl UGFyc2VEYXRhKG9SZXF1ZXN0LG9GdWxsUmVzcG9uc2Usb0NhbGxiYWNrKTtvUGFy c2VkUmVzcG9uc2U9dGhpcy5wYXJzZVRleHREYXRhKG9SZXF1ZXN0LG9GdWxsUmVz cG9uc2UpO2JyZWFrO2RlZmF1bHQ6b0Z1bGxSZXNwb25zZT10aGlzLmRvQmVmb3Jl UGFyc2VEYXRhKG9SZXF1ZXN0LG9GdWxsUmVzcG9uc2Usb0NhbGxiYWNrKTtvUGFy c2VkUmVzcG9uc2U9dGhpcy5wYXJzZURhdGEob1JlcXVlc3Qsb0Z1bGxSZXNwb25z ZSk7YnJlYWs7fW9QYXJzZWRSZXNwb25zZT1vUGFyc2VkUmVzcG9uc2V8fHt9O2lm KCFvUGFyc2VkUmVzcG9uc2UucmVzdWx0cyl7b1BhcnNlZFJlc3BvbnNlLnJlc3Vs dHM9W107fWlmKCFvUGFyc2VkUmVzcG9uc2UubWV0YSl7b1BhcnNlZFJlc3BvbnNl Lm1ldGE9e307fWlmKG9QYXJzZWRSZXNwb25zZSYmIW9QYXJzZWRSZXNwb25zZS5l cnJvcil7b1BhcnNlZFJlc3BvbnNlPXRoaXMuZG9CZWZvcmVDYWxsYmFjayhvUmVx dWVzdCxvRnVsbFJlc3BvbnNlLG9QYXJzZWRSZXNwb25zZSxvQ2FsbGJhY2spO3Ro aXMuZmlyZUV2ZW50KCJyZXNwb25zZVBhcnNlRXZlbnQiLHtyZXF1ZXN0Om9SZXF1 ZXN0LHJlc3BvbnNlOm9QYXJzZWRSZXNwb25zZSxjYWxsYmFjazpvQ2FsbGJhY2ss Y2FsbGVyOm9DYWxsZXJ9KTt0aGlzLmFkZFRvQ2FjaGUob1JlcXVlc3Qsb1BhcnNl ZFJlc3BvbnNlKTt9ZWxzZXtvUGFyc2VkUmVzcG9uc2UuZXJyb3I9dHJ1ZTt0aGlz LmZpcmVFdmVudCgiZGF0YUVycm9yRXZlbnQiLHtyZXF1ZXN0Om9SZXF1ZXN0LHJl c3BvbnNlOm9SYXdSZXNwb25zZSxjYWxsYmFjazpvQ2FsbGJhY2ssY2FsbGVyOm9D YWxsZXIsbWVzc2FnZTpEUy5FUlJPUl9EQVRBTlVMTH0pO31vUGFyc2VkUmVzcG9u c2UudElkPXRJZDtEUy5pc3N1ZUNhbGxiYWNrKG9DYWxsYmFjayxbb1JlcXVlc3Qs b1BhcnNlZFJlc3BvbnNlXSxvUGFyc2VkUmVzcG9uc2UuZXJyb3Isb0NhbGxlcik7 fSxkb0JlZm9yZVBhcnNlRGF0YTpmdW5jdGlvbihvUmVxdWVzdCxvRnVsbFJlc3Bv bnNlLG9DYWxsYmFjayl7cmV0dXJuIG9GdWxsUmVzcG9uc2U7fSxkb0JlZm9yZUNh bGxiYWNrOmZ1bmN0aW9uKG9SZXF1ZXN0LG9GdWxsUmVzcG9uc2Usb1BhcnNlZFJl c3BvbnNlLG9DYWxsYmFjayl7cmV0dXJuIG9QYXJzZWRSZXNwb25zZTt9LHBhcnNl RGF0YTpmdW5jdGlvbihvUmVxdWVzdCxvRnVsbFJlc3BvbnNlKXtpZihsYW5nLmlz VmFsdWUob0Z1bGxSZXNwb25zZSkpe3ZhciBvUGFyc2VkUmVzcG9uc2U9e3Jlc3Vs dHM6b0Z1bGxSZXNwb25zZSxtZXRhOnt9fTtyZXR1cm4gb1BhcnNlZFJlc3BvbnNl O31yZXR1cm4gbnVsbDt9LHBhcnNlQXJyYXlEYXRhOmZ1bmN0aW9uKG9SZXF1ZXN0 LG9GdWxsUmVzcG9uc2Upe2lmKGxhbmcuaXNBcnJheShvRnVsbFJlc3BvbnNlKSl7 dmFyIHJlc3VsdHM9W10saSxqLHJlYyxmaWVsZCxkYXRhO2lmKGxhbmcuaXNBcnJh eSh0aGlzLnJlc3BvbnNlU2NoZW1hLmZpZWxkcykpe3ZhciBmaWVsZHM9dGhpcy5y ZXNwb25zZVNjaGVtYS5maWVsZHM7Zm9yKGk9ZmllbGRzLmxlbmd0aC0xO2k+PTA7 LS1pKXtpZih0eXBlb2YgZmllbGRzW2ldIT09Im9iamVjdCIpe2ZpZWxkc1tpXT17 a2V5OmZpZWxkc1tpXX07fX12YXIgcGFyc2Vycz17fSxwO2ZvcihpPWZpZWxkcy5s ZW5ndGgtMTtpPj0wOy0taSl7cD0odHlwZW9mIGZpZWxkc1tpXS5wYXJzZXI9PT0i ZnVuY3Rpb24iP2ZpZWxkc1tpXS5wYXJzZXI6RFMuUGFyc2VyW2ZpZWxkc1tpXS5w YXJzZXIrIiJdKXx8ZmllbGRzW2ldLmNvbnZlcnRlcjtpZihwKXtwYXJzZXJzW2Zp ZWxkc1tpXS5rZXldPXA7fX12YXIgYXJyVHlwZT1sYW5nLmlzQXJyYXkob0Z1bGxS ZXNwb25zZVswXSk7Zm9yKGk9b0Z1bGxSZXNwb25zZS5sZW5ndGgtMTtpPi0xO2kt LSl7dmFyIG9SZXN1bHQ9e307cmVjPW9GdWxsUmVzcG9uc2VbaV07aWYodHlwZW9m IHJlYz09PSJvYmplY3QiKXtmb3Ioaj1maWVsZHMubGVuZ3RoLTE7aj4tMTtqLS0p e2ZpZWxkPWZpZWxkc1tqXTtkYXRhPWFyclR5cGU/cmVjW2pdOnJlY1tmaWVsZC5r ZXldO2lmKHBhcnNlcnNbZmllbGQua2V5XSl7ZGF0YT1wYXJzZXJzW2ZpZWxkLmtl eV0uY2FsbCh0aGlzLGRhdGEpO31pZihkYXRhPT09dW5kZWZpbmVkKXtkYXRhPW51 bGw7fW9SZXN1bHRbZmllbGQua2V5XT1kYXRhO319ZWxzZXtpZihsYW5nLmlzU3Ry aW5nKHJlYykpe2ZvcihqPWZpZWxkcy5sZW5ndGgtMTtqPi0xO2otLSl7ZmllbGQ9 ZmllbGRzW2pdO2RhdGE9cmVjO2lmKHBhcnNlcnNbZmllbGQua2V5XSl7ZGF0YT1w YXJzZXJzW2ZpZWxkLmtleV0uY2FsbCh0aGlzLGRhdGEpO31pZihkYXRhPT09dW5k ZWZpbmVkKXtkYXRhPW51bGw7fW9SZXN1bHRbZmllbGQua2V5XT1kYXRhO319fXJl c3VsdHNbaV09b1Jlc3VsdDt9fWVsc2V7cmVzdWx0cz1vRnVsbFJlc3BvbnNlO312 YXIgb1BhcnNlZFJlc3BvbnNlPXtyZXN1bHRzOnJlc3VsdHN9O3JldHVybiBvUGFy c2VkUmVzcG9uc2U7fXJldHVybiBudWxsO30scGFyc2VUZXh0RGF0YTpmdW5jdGlv bihvUmVxdWVzdCxvRnVsbFJlc3BvbnNlKXtpZihsYW5nLmlzU3RyaW5nKG9GdWxs UmVzcG9uc2UpKXtpZihsYW5nLmlzU3RyaW5nKHRoaXMucmVzcG9uc2VTY2hlbWEu cmVjb3JkRGVsaW0pJiZsYW5nLmlzU3RyaW5nKHRoaXMucmVzcG9uc2VTY2hlbWEu ZmllbGREZWxpbSkpe3ZhciBvUGFyc2VkUmVzcG9uc2U9e3Jlc3VsdHM6W119O3Zh ciByZWNEZWxpbT10aGlzLnJlc3BvbnNlU2NoZW1hLnJlY29yZERlbGltO3ZhciBm aWVsZERlbGltPXRoaXMucmVzcG9uc2VTY2hlbWEuZmllbGREZWxpbTtpZihvRnVs bFJlc3BvbnNlLmxlbmd0aD4wKXt2YXIgbmV3TGVuZ3RoPW9GdWxsUmVzcG9uc2Uu bGVuZ3RoLXJlY0RlbGltLmxlbmd0aDtpZihvRnVsbFJlc3BvbnNlLnN1YnN0cihu ZXdMZW5ndGgpPT1yZWNEZWxpbSl7b0Z1bGxSZXNwb25zZT1vRnVsbFJlc3BvbnNl LnN1YnN0cigwLG5ld0xlbmd0aCk7fWlmKG9GdWxsUmVzcG9uc2UubGVuZ3RoPjAp e3ZhciByZWNvcmRzYXJyYXk9b0Z1bGxSZXNwb25zZS5zcGxpdChyZWNEZWxpbSk7 Zm9yKHZhciBpPTAsbGVuPXJlY29yZHNhcnJheS5sZW5ndGgscmVjSWR4PTA7aTxs ZW47KytpKXt2YXIgYkVycm9yPWZhbHNlLHNSZWNvcmQ9cmVjb3Jkc2FycmF5W2ld O2lmKGxhbmcuaXNTdHJpbmcoc1JlY29yZCkmJihzUmVjb3JkLmxlbmd0aD4wKSl7 dmFyIGZpZWxkZGF0YWFycmF5PXJlY29yZHNhcnJheVtpXS5zcGxpdChmaWVsZERl bGltKTt2YXIgb1Jlc3VsdD17fTtpZihsYW5nLmlzQXJyYXkodGhpcy5yZXNwb25z ZVNjaGVtYS5maWVsZHMpKXt2YXIgZmllbGRzPXRoaXMucmVzcG9uc2VTY2hlbWEu ZmllbGRzO2Zvcih2YXIgaj1maWVsZHMubGVuZ3RoLTE7aj4tMTtqLS0pe3RyeXt2 YXIgZGF0YT1maWVsZGRhdGFhcnJheVtqXTtpZihsYW5nLmlzU3RyaW5nKGRhdGEp KXtpZihkYXRhLmNoYXJBdCgwKT09JyInKXtkYXRhPWRhdGEuc3Vic3RyKDEpO31p ZihkYXRhLmNoYXJBdChkYXRhLmxlbmd0aC0xKT09JyInKXtkYXRhPWRhdGEuc3Vi c3RyKDAsZGF0YS5sZW5ndGgtMSk7fXZhciBmaWVsZD1maWVsZHNbal07dmFyIGtl eT0obGFuZy5pc1ZhbHVlKGZpZWxkLmtleSkpP2ZpZWxkLmtleTpmaWVsZDtpZigh ZmllbGQucGFyc2VyJiZmaWVsZC5jb252ZXJ0ZXIpe2ZpZWxkLnBhcnNlcj1maWVs ZC5jb252ZXJ0ZXI7fXZhciBwYXJzZXI9KHR5cGVvZiBmaWVsZC5wYXJzZXI9PT0i ZnVuY3Rpb24iKT9maWVsZC5wYXJzZXI6RFMuUGFyc2VyW2ZpZWxkLnBhcnNlcisi Il07aWYocGFyc2VyKXtkYXRhPXBhcnNlci5jYWxsKHRoaXMsZGF0YSk7fWlmKGRh dGE9PT11bmRlZmluZWQpe2RhdGE9bnVsbDt9b1Jlc3VsdFtrZXldPWRhdGE7fWVs c2V7YkVycm9yPXRydWU7fX1jYXRjaChlKXtiRXJyb3I9dHJ1ZTt9fX1lbHNle29S ZXN1bHQ9ZmllbGRkYXRhYXJyYXk7fWlmKCFiRXJyb3Ipe29QYXJzZWRSZXNwb25z ZS5yZXN1bHRzW3JlY0lkeCsrXT1vUmVzdWx0O319fX19cmV0dXJuIG9QYXJzZWRS ZXNwb25zZTt9fXJldHVybiBudWxsO30scGFyc2VYTUxSZXN1bHQ6ZnVuY3Rpb24o cmVzdWx0KXt2YXIgb1Jlc3VsdD17fSxzY2hlbWE9dGhpcy5yZXNwb25zZVNjaGVt YTt0cnl7Zm9yKHZhciBtPXNjaGVtYS5maWVsZHMubGVuZ3RoLTE7bT49MDttLS0p e3ZhciBmaWVsZD1zY2hlbWEuZmllbGRzW21dO3ZhciBrZXk9KGxhbmcuaXNWYWx1 ZShmaWVsZC5rZXkpKT9maWVsZC5rZXk6ZmllbGQ7dmFyIGRhdGE9bnVsbDt2YXIg eG1sQXR0cj1yZXN1bHQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oa2V5KTtpZih4 bWxBdHRyKXtkYXRhPXhtbEF0dHIudmFsdWU7fWVsc2V7dmFyIHhtbE5vZGU9cmVz dWx0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGtleSk7aWYoeG1sTm9kZSYmeG1sTm9k ZS5pdGVtKDApKXt2YXIgaXRlbT14bWxOb2RlLml0ZW0oMCk7ZGF0YT0oaXRlbSk/ KChpdGVtLnRleHQpP2l0ZW0udGV4dDooaXRlbS50ZXh0Q29udGVudCk/aXRlbS50 ZXh0Q29udGVudDpudWxsKTpudWxsO2lmKCFkYXRhKXt2YXIgZGF0YXBpZWNlcz1b XTtmb3IodmFyIGo9MCxsZW49aXRlbS5jaGlsZE5vZGVzLmxlbmd0aDtqPGxlbjtq Kyspe2lmKGl0ZW0uY2hpbGROb2Rlc1tqXS5ub2RlVmFsdWUpe2RhdGFwaWVjZXNb ZGF0YXBpZWNlcy5sZW5ndGhdPWl0ZW0uY2hpbGROb2Rlc1tqXS5ub2RlVmFsdWU7 fX1pZihkYXRhcGllY2VzLmxlbmd0aD4wKXtkYXRhPWRhdGFwaWVjZXMuam9pbigi Iik7fX19fWlmKGRhdGE9PT1udWxsKXtkYXRhPSIiO31pZighZmllbGQucGFyc2Vy JiZmaWVsZC5jb252ZXJ0ZXIpe2ZpZWxkLnBhcnNlcj1maWVsZC5jb252ZXJ0ZXI7 fXZhciBwYXJzZXI9KHR5cGVvZiBmaWVsZC5wYXJzZXI9PT0iZnVuY3Rpb24iKT9m aWVsZC5wYXJzZXI6RFMuUGFyc2VyW2ZpZWxkLnBhcnNlcisiIl07aWYocGFyc2Vy KXtkYXRhPXBhcnNlci5jYWxsKHRoaXMsZGF0YSk7fWlmKGRhdGE9PT11bmRlZmlu ZWQpe2RhdGE9bnVsbDt9b1Jlc3VsdFtrZXldPWRhdGE7fX1jYXRjaChlKXt9cmV0 dXJuIG9SZXN1bHQ7fSxwYXJzZVhNTERhdGE6ZnVuY3Rpb24ob1JlcXVlc3Qsb0Z1 bGxSZXNwb25zZSl7dmFyIGJFcnJvcj1mYWxzZSxzY2hlbWE9dGhpcy5yZXNwb25z ZVNjaGVtYSxvUGFyc2VkUmVzcG9uc2U9e21ldGE6e319LHhtbExpc3Q9bnVsbCxt ZXRhTm9kZT1zY2hlbWEubWV0YU5vZGUsbWV0YUxvY2F0b3JzPXNjaGVtYS5tZXRh RmllbGRzfHx7fSxpLGssbG9jLHY7dHJ5e3htbExpc3Q9KHNjaGVtYS5yZXN1bHRO b2RlKT9vRnVsbFJlc3BvbnNlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHNjaGVtYS5y ZXN1bHROb2RlKTpudWxsO21ldGFOb2RlPW1ldGFOb2RlP29GdWxsUmVzcG9uc2Uu Z2V0RWxlbWVudHNCeVRhZ05hbWUobWV0YU5vZGUpWzBdOm9GdWxsUmVzcG9uc2U7 aWYobWV0YU5vZGUpe2ZvcihrIGluIG1ldGFMb2NhdG9ycyl7aWYobGFuZy5oYXNP d25Qcm9wZXJ0eShtZXRhTG9jYXRvcnMsaykpe2xvYz1tZXRhTG9jYXRvcnNba107 dj1tZXRhTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZShsb2MpWzBdO2lmKHYpe3Y9 di5maXJzdENoaWxkLm5vZGVWYWx1ZTt9ZWxzZXt2PW1ldGFOb2RlLmF0dHJpYnV0 ZXMuZ2V0TmFtZWRJdGVtKGxvYyk7aWYodil7dj12LnZhbHVlO319aWYobGFuZy5p c1ZhbHVlKHYpKXtvUGFyc2VkUmVzcG9uc2UubWV0YVtrXT12O319fX19Y2F0Y2go ZSl7fWlmKCF4bWxMaXN0fHwhbGFuZy5pc0FycmF5KHNjaGVtYS5maWVsZHMpKXti RXJyb3I9dHJ1ZTt9ZWxzZXtvUGFyc2VkUmVzcG9uc2UucmVzdWx0cz1bXTtmb3Io aT14bWxMaXN0Lmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgb1Jlc3VsdD10aGlzLnBh cnNlWE1MUmVzdWx0KHhtbExpc3QuaXRlbShpKSk7b1BhcnNlZFJlc3BvbnNlLnJl c3VsdHNbaV09b1Jlc3VsdDt9fWlmKGJFcnJvcil7b1BhcnNlZFJlc3BvbnNlLmVy cm9yPXRydWU7fWVsc2V7fXJldHVybiBvUGFyc2VkUmVzcG9uc2U7fSxwYXJzZUpT T05EYXRhOmZ1bmN0aW9uKG9SZXF1ZXN0LG9GdWxsUmVzcG9uc2Upe3ZhciBvUGFy c2VkUmVzcG9uc2U9e3Jlc3VsdHM6W10sbWV0YTp7fX07aWYobGFuZy5pc09iamVj dChvRnVsbFJlc3BvbnNlKSYmdGhpcy5yZXNwb25zZVNjaGVtYS5yZXN1bHRzTGlz dCl7dmFyIHNjaGVtYT10aGlzLnJlc3BvbnNlU2NoZW1hLGZpZWxkcz1zY2hlbWEu ZmllbGRzLHJlc3VsdHNMaXN0PW9GdWxsUmVzcG9uc2UscmVzdWx0cz1bXSxtZXRh RmllbGRzPXNjaGVtYS5tZXRhRmllbGRzfHx7fSxmaWVsZFBhcnNlcnM9W10sZmll bGRQYXRocz1bXSxzaW1wbGVGaWVsZHM9W10sYkVycm9yPWZhbHNlLGksbGVuLGos dixrZXkscGFyc2VyLHBhdGg7dmFyIGJ1aWxkUGF0aD1mdW5jdGlvbihuZWVkbGUp e3ZhciBwYXRoPW51bGwsa2V5cz1bXSxpPTA7aWYobmVlZGxlKXtuZWVkbGU9bmVl ZGxlLnJlcGxhY2UoL1xbKFsnIl0pKC4qPylcMVxdL2csZnVuY3Rpb24oeCwkMSwk Mil7a2V5c1tpXT0kMjtyZXR1cm4iLkAiKyhpKyspO30pLnJlcGxhY2UoL1xbKFxk KylcXS9nLGZ1bmN0aW9uKHgsJDEpe2tleXNbaV09cGFyc2VJbnQoJDEsMTApfDA7 cmV0dXJuIi5AIisoaSsrKTt9KS5yZXBsYWNlKC9eXC4vLCIiKTtpZighL1teXHdc LlwkQF0vLnRlc3QobmVlZGxlKSl7cGF0aD1uZWVkbGUuc3BsaXQoIi4iKTtmb3Io aT1wYXRoLmxlbmd0aC0xO2k+PTA7LS1pKXtpZihwYXRoW2ldLmNoYXJBdCgwKT09 PSJAIil7cGF0aFtpXT1rZXlzW3BhcnNlSW50KHBhdGhbaV0uc3Vic3RyKDEpLDEw KV07fX19ZWxzZXt9fXJldHVybiBwYXRoO307dmFyIHdhbGtQYXRoPWZ1bmN0aW9u KHBhdGgsb3JpZ2luKXt2YXIgdj1vcmlnaW4saT0wLGxlbj1wYXRoLmxlbmd0aDtm b3IoO2k8bGVuJiZ2OysraSl7dj12W3BhdGhbaV1dO31yZXR1cm4gdjt9O3BhdGg9 YnVpbGRQYXRoKHNjaGVtYS5yZXN1bHRzTGlzdCk7aWYocGF0aCl7cmVzdWx0c0xp c3Q9d2Fsa1BhdGgocGF0aCxvRnVsbFJlc3BvbnNlKTtpZihyZXN1bHRzTGlzdD09 PXVuZGVmaW5lZCl7YkVycm9yPXRydWU7fX1lbHNle2JFcnJvcj10cnVlO31pZigh cmVzdWx0c0xpc3Qpe3Jlc3VsdHNMaXN0PVtdO31pZighbGFuZy5pc0FycmF5KHJl c3VsdHNMaXN0KSl7cmVzdWx0c0xpc3Q9W3Jlc3VsdHNMaXN0XTt9aWYoIWJFcnJv cil7aWYoc2NoZW1hLmZpZWxkcyl7dmFyIGZpZWxkO2ZvcihpPTAsbGVuPWZpZWxk cy5sZW5ndGg7aTxsZW47aSsrKXtmaWVsZD1maWVsZHNbaV07a2V5PWZpZWxkLmtl eXx8ZmllbGQ7cGFyc2VyPSgodHlwZW9mIGZpZWxkLnBhcnNlcj09PSJmdW5jdGlv biIpP2ZpZWxkLnBhcnNlcjpEUy5QYXJzZXJbZmllbGQucGFyc2VyKyIiXSl8fGZp ZWxkLmNvbnZlcnRlcjtwYXRoPWJ1aWxkUGF0aChrZXkpO2lmKHBhcnNlcil7Zmll bGRQYXJzZXJzW2ZpZWxkUGFyc2Vycy5sZW5ndGhdPXtrZXk6a2V5LHBhcnNlcjpw YXJzZXJ9O31pZihwYXRoKXtpZihwYXRoLmxlbmd0aD4xKXtmaWVsZFBhdGhzW2Zp ZWxkUGF0aHMubGVuZ3RoXT17a2V5OmtleSxwYXRoOnBhdGh9O31lbHNle3NpbXBs ZUZpZWxkc1tzaW1wbGVGaWVsZHMubGVuZ3RoXT17a2V5OmtleSxwYXRoOnBhdGhb MF19O319ZWxzZXt9fWZvcihpPXJlc3VsdHNMaXN0Lmxlbmd0aC0xO2k+PTA7LS1p KXt2YXIgcj1yZXN1bHRzTGlzdFtpXSxyZWM9e307aWYocil7Zm9yKGo9c2ltcGxl RmllbGRzLmxlbmd0aC0xO2o+PTA7LS1qKXtyZWNbc2ltcGxlRmllbGRzW2pdLmtl eV09KHJbc2ltcGxlRmllbGRzW2pdLnBhdGhdIT09dW5kZWZpbmVkKT9yW3NpbXBs ZUZpZWxkc1tqXS5wYXRoXTpyW2pdO31mb3Ioaj1maWVsZFBhdGhzLmxlbmd0aC0x O2o+PTA7LS1qKXtyZWNbZmllbGRQYXRoc1tqXS5rZXldPXdhbGtQYXRoKGZpZWxk UGF0aHNbal0ucGF0aCxyKTt9Zm9yKGo9ZmllbGRQYXJzZXJzLmxlbmd0aC0xO2o+ PTA7LS1qKXt2YXIgcD1maWVsZFBhcnNlcnNbal0ua2V5O3JlY1twXT1maWVsZFBh cnNlcnNbal0ucGFyc2VyKHJlY1twXSk7aWYocmVjW3BdPT09dW5kZWZpbmVkKXty ZWNbcF09bnVsbDt9fX1yZXN1bHRzW2ldPXJlYzt9fWVsc2V7cmVzdWx0cz1yZXN1 bHRzTGlzdDt9Zm9yKGtleSBpbiBtZXRhRmllbGRzKXtpZihsYW5nLmhhc093blBy b3BlcnR5KG1ldGFGaWVsZHMsa2V5KSl7cGF0aD1idWlsZFBhdGgobWV0YUZpZWxk c1trZXldKTtpZihwYXRoKXt2PXdhbGtQYXRoKHBhdGgsb0Z1bGxSZXNwb25zZSk7 b1BhcnNlZFJlc3BvbnNlLm1ldGFba2V5XT12O319fX1lbHNle29QYXJzZWRSZXNw b25zZS5lcnJvcj10cnVlO31vUGFyc2VkUmVzcG9uc2UucmVzdWx0cz1yZXN1bHRz O31lbHNle29QYXJzZWRSZXNwb25zZS5lcnJvcj10cnVlO31yZXR1cm4gb1BhcnNl ZFJlc3BvbnNlO30scGFyc2VIVE1MVGFibGVEYXRhOmZ1bmN0aW9uKG9SZXF1ZXN0 LG9GdWxsUmVzcG9uc2Upe3ZhciBiRXJyb3I9ZmFsc2U7dmFyIGVsVGFibGU9b0Z1 bGxSZXNwb25zZTt2YXIgZmllbGRzPXRoaXMucmVzcG9uc2VTY2hlbWEuZmllbGRz O3ZhciBvUGFyc2VkUmVzcG9uc2U9e3Jlc3VsdHM6W119O2lmKGxhbmcuaXNBcnJh eShmaWVsZHMpKXtmb3IodmFyIGk9MDtpPGVsVGFibGUudEJvZGllcy5sZW5ndGg7 aSsrKXt2YXIgZWxUYm9keT1lbFRhYmxlLnRCb2RpZXNbaV07Zm9yKHZhciBqPWVs VGJvZHkucm93cy5sZW5ndGgtMTtqPi0xO2otLSl7dmFyIGVsUm93PWVsVGJvZHku cm93c1tqXTt2YXIgb1Jlc3VsdD17fTtmb3IodmFyIGs9ZmllbGRzLmxlbmd0aC0x O2s+LTE7ay0tKXt2YXIgZmllbGQ9ZmllbGRzW2tdO3ZhciBrZXk9KGxhbmcuaXNW YWx1ZShmaWVsZC5rZXkpKT9maWVsZC5rZXk6ZmllbGQ7dmFyIGRhdGE9ZWxSb3cu Y2VsbHNba10uaW5uZXJIVE1MO2lmKCFmaWVsZC5wYXJzZXImJmZpZWxkLmNvbnZl cnRlcil7ZmllbGQucGFyc2VyPWZpZWxkLmNvbnZlcnRlcjt9dmFyIHBhcnNlcj0o dHlwZW9mIGZpZWxkLnBhcnNlcj09PSJmdW5jdGlvbiIpP2ZpZWxkLnBhcnNlcjpE Uy5QYXJzZXJbZmllbGQucGFyc2VyKyIiXTtpZihwYXJzZXIpe2RhdGE9cGFyc2Vy LmNhbGwodGhpcyxkYXRhKTt9aWYoZGF0YT09PXVuZGVmaW5lZCl7ZGF0YT1udWxs O31vUmVzdWx0W2tleV09ZGF0YTt9b1BhcnNlZFJlc3BvbnNlLnJlc3VsdHNbal09 b1Jlc3VsdDt9fX1lbHNle2JFcnJvcj10cnVlO31pZihiRXJyb3Ipe29QYXJzZWRS ZXNwb25zZS5lcnJvcj10cnVlO31lbHNle31yZXR1cm4gb1BhcnNlZFJlc3BvbnNl O319O2xhbmcuYXVnbWVudFByb3RvKERTLHV0aWwuRXZlbnRQcm92aWRlcik7dXRp bC5Mb2NhbERhdGFTb3VyY2U9ZnVuY3Rpb24ob0xpdmVEYXRhLG9Db25maWdzKXt0 aGlzLmRhdGFUeXBlPURTLlRZUEVfTE9DQUw7aWYob0xpdmVEYXRhKXtpZihZQUhP Ty5sYW5nLmlzQXJyYXkob0xpdmVEYXRhKSl7dGhpcy5yZXNwb25zZVR5cGU9RFMu VFlQRV9KU0FSUkFZO31lbHNle2lmKG9MaXZlRGF0YS5ub2RlVHlwZSYmb0xpdmVE YXRhLm5vZGVUeXBlPT05KXt0aGlzLnJlc3BvbnNlVHlwZT1EUy5UWVBFX1hNTDt9 ZWxzZXtpZihvTGl2ZURhdGEubm9kZU5hbWUmJihvTGl2ZURhdGEubm9kZU5hbWUu dG9Mb3dlckNhc2UoKT09InRhYmxlIikpe3RoaXMucmVzcG9uc2VUeXBlPURTLlRZ UEVfSFRNTFRBQkxFO29MaXZlRGF0YT1vTGl2ZURhdGEuY2xvbmVOb2RlKHRydWUp O31lbHNle2lmKFlBSE9PLmxhbmcuaXNTdHJpbmcob0xpdmVEYXRhKSl7dGhpcy5y ZXNwb25zZVR5cGU9RFMuVFlQRV9URVhUO31lbHNle2lmKFlBSE9PLmxhbmcuaXNP YmplY3Qob0xpdmVEYXRhKSl7dGhpcy5yZXNwb25zZVR5cGU9RFMuVFlQRV9KU09O O319fX19fWVsc2V7b0xpdmVEYXRhPVtdO3RoaXMucmVzcG9uc2VUeXBlPURTLlRZ UEVfSlNBUlJBWTt9dXRpbC5Mb2NhbERhdGFTb3VyY2Uuc3VwZXJjbGFzcy5jb25z dHJ1Y3Rvci5jYWxsKHRoaXMsb0xpdmVEYXRhLG9Db25maWdzKTt9O2xhbmcuZXh0 ZW5kKHV0aWwuTG9jYWxEYXRhU291cmNlLERTKTtsYW5nLmF1Z21lbnRPYmplY3Qo dXRpbC5Mb2NhbERhdGFTb3VyY2UsRFMpO3V0aWwuRnVuY3Rpb25EYXRhU291cmNl PWZ1bmN0aW9uKG9MaXZlRGF0YSxvQ29uZmlncyl7dGhpcy5kYXRhVHlwZT1EUy5U WVBFX0pTRlVOQ1RJT047b0xpdmVEYXRhPW9MaXZlRGF0YXx8ZnVuY3Rpb24oKXt9 O3V0aWwuRnVuY3Rpb25EYXRhU291cmNlLnN1cGVyY2xhc3MuY29uc3RydWN0b3Iu Y2FsbCh0aGlzLG9MaXZlRGF0YSxvQ29uZmlncyk7fTtsYW5nLmV4dGVuZCh1dGls LkZ1bmN0aW9uRGF0YVNvdXJjZSxEUyx7c2NvcGU6bnVsbCxtYWtlQ29ubmVjdGlv bjpmdW5jdGlvbihvUmVxdWVzdCxvQ2FsbGJhY2ssb0NhbGxlcil7dmFyIHRJZD1E Uy5fblRyYW5zYWN0aW9uSWQrKzt0aGlzLmZpcmVFdmVudCgicmVxdWVzdEV2ZW50 Iix7dElkOnRJZCxyZXF1ZXN0Om9SZXF1ZXN0LGNhbGxiYWNrOm9DYWxsYmFjayxj YWxsZXI6b0NhbGxlcn0pO3ZhciBvUmF3UmVzcG9uc2U9KHRoaXMuc2NvcGUpP3Ro aXMubGl2ZURhdGEuY2FsbCh0aGlzLnNjb3BlLG9SZXF1ZXN0LHRoaXMpOnRoaXMu bGl2ZURhdGEob1JlcXVlc3QpO2lmKHRoaXMucmVzcG9uc2VUeXBlPT09RFMuVFlQ RV9VTktOT1dOKXtpZihZQUhPTy5sYW5nLmlzQXJyYXkob1Jhd1Jlc3BvbnNlKSl7 dGhpcy5yZXNwb25zZVR5cGU9RFMuVFlQRV9KU0FSUkFZO31lbHNle2lmKG9SYXdS ZXNwb25zZSYmb1Jhd1Jlc3BvbnNlLm5vZGVUeXBlJiZvUmF3UmVzcG9uc2Uubm9k ZVR5cGU9PTkpe3RoaXMucmVzcG9uc2VUeXBlPURTLlRZUEVfWE1MO31lbHNle2lm KG9SYXdSZXNwb25zZSYmb1Jhd1Jlc3BvbnNlLm5vZGVOYW1lJiYob1Jhd1Jlc3Bv bnNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJ0YWJsZSIpKXt0aGlzLnJlc3Bv bnNlVHlwZT1EUy5UWVBFX0hUTUxUQUJMRTt9ZWxzZXtpZihZQUhPTy5sYW5nLmlz T2JqZWN0KG9SYXdSZXNwb25zZSkpe3RoaXMucmVzcG9uc2VUeXBlPURTLlRZUEVf SlNPTjt9ZWxzZXtpZihZQUhPTy5sYW5nLmlzU3RyaW5nKG9SYXdSZXNwb25zZSkp e3RoaXMucmVzcG9uc2VUeXBlPURTLlRZUEVfVEVYVDt9fX19fX10aGlzLmhhbmRs ZVJlc3BvbnNlKG9SZXF1ZXN0LG9SYXdSZXNwb25zZSxvQ2FsbGJhY2ssb0NhbGxl cix0SWQpO3JldHVybiB0SWQ7fX0pO2xhbmcuYXVnbWVudE9iamVjdCh1dGlsLkZ1 bmN0aW9uRGF0YVNvdXJjZSxEUyk7dXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZT1m dW5jdGlvbihvTGl2ZURhdGEsb0NvbmZpZ3Mpe3RoaXMuZGF0YVR5cGU9RFMuVFlQ RV9TQ1JJUFROT0RFO29MaXZlRGF0YT1vTGl2ZURhdGF8fCIiO3V0aWwuU2NyaXB0 Tm9kZURhdGFTb3VyY2Uuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMs b0xpdmVEYXRhLG9Db25maWdzKTt9O2xhbmcuZXh0ZW5kKHV0aWwuU2NyaXB0Tm9k ZURhdGFTb3VyY2UsRFMse2dldFV0aWxpdHk6dXRpbC5HZXQsYXN5bmNNb2RlOiJh bGxvd0FsbCIsc2NyaXB0Q2FsbGJhY2tQYXJhbToiY2FsbGJhY2siLGdlbmVyYXRl UmVxdWVzdENhbGxiYWNrOmZ1bmN0aW9uKGlkKXtyZXR1cm4iJiIrdGhpcy5zY3Jp cHRDYWxsYmFja1BhcmFtKyI9WUFIT08udXRpbC5TY3JpcHROb2RlRGF0YVNvdXJj ZS5jYWxsYmFja3NbIitpZCsiXSI7fSxkb0JlZm9yZUdldFNjcmlwdE5vZGU6ZnVu Y3Rpb24oc1VyaSl7cmV0dXJuIHNVcmk7fSxtYWtlQ29ubmVjdGlvbjpmdW5jdGlv bihvUmVxdWVzdCxvQ2FsbGJhY2ssb0NhbGxlcil7dmFyIHRJZD1EUy5fblRyYW5z YWN0aW9uSWQrKzt0aGlzLmZpcmVFdmVudCgicmVxdWVzdEV2ZW50Iix7dElkOnRJ ZCxyZXF1ZXN0Om9SZXF1ZXN0LGNhbGxiYWNrOm9DYWxsYmFjayxjYWxsZXI6b0Nh bGxlcn0pO2lmKHV0aWwuU2NyaXB0Tm9kZURhdGFTb3VyY2UuX25QZW5kaW5nPT09 MCl7dXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZS5jYWxsYmFja3M9W107dXRpbC5T Y3JpcHROb2RlRGF0YVNvdXJjZS5fbklkPTA7fXZhciBpZD11dGlsLlNjcmlwdE5v ZGVEYXRhU291cmNlLl9uSWQ7dXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZS5fbklk Kys7dmFyIG9TZWxmPXRoaXM7dXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZS5jYWxs YmFja3NbaWRdPWZ1bmN0aW9uKG9SYXdSZXNwb25zZSl7aWYoKG9TZWxmLmFzeW5j TW9kZSE9PSJpZ25vcmVTdGFsZVJlc3BvbnNlcyIpfHwoaWQ9PT11dGlsLlNjcmlw dE5vZGVEYXRhU291cmNlLmNhbGxiYWNrcy5sZW5ndGgtMSkpe2lmKG9TZWxmLnJl c3BvbnNlVHlwZT09PURTLlRZUEVfVU5LTk9XTil7aWYoWUFIT08ubGFuZy5pc0Fy cmF5KG9SYXdSZXNwb25zZSkpe29TZWxmLnJlc3BvbnNlVHlwZT1EUy5UWVBFX0pT QVJSQVk7fWVsc2V7aWYob1Jhd1Jlc3BvbnNlLm5vZGVUeXBlJiZvUmF3UmVzcG9u c2Uubm9kZVR5cGU9PTkpe29TZWxmLnJlc3BvbnNlVHlwZT1EUy5UWVBFX1hNTDt9 ZWxzZXtpZihvUmF3UmVzcG9uc2Uubm9kZU5hbWUmJihvUmF3UmVzcG9uc2Uubm9k ZU5hbWUudG9Mb3dlckNhc2UoKT09InRhYmxlIikpe29TZWxmLnJlc3BvbnNlVHlw ZT1EUy5UWVBFX0hUTUxUQUJMRTt9ZWxzZXtpZihZQUhPTy5sYW5nLmlzT2JqZWN0 KG9SYXdSZXNwb25zZSkpe29TZWxmLnJlc3BvbnNlVHlwZT1EUy5UWVBFX0pTT047 fWVsc2V7aWYoWUFIT08ubGFuZy5pc1N0cmluZyhvUmF3UmVzcG9uc2UpKXtvU2Vs Zi5yZXNwb25zZVR5cGU9RFMuVFlQRV9URVhUO319fX19fW9TZWxmLmhhbmRsZVJl c3BvbnNlKG9SZXF1ZXN0LG9SYXdSZXNwb25zZSxvQ2FsbGJhY2ssb0NhbGxlcix0 SWQpO31lbHNle31kZWxldGUgdXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZS5jYWxs YmFja3NbaWRdO307dXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZS5fblBlbmRpbmcr Kzt2YXIgc1VyaT10aGlzLmxpdmVEYXRhK29SZXF1ZXN0K3RoaXMuZ2VuZXJhdGVS ZXF1ZXN0Q2FsbGJhY2soaWQpO3NVcmk9dGhpcy5kb0JlZm9yZUdldFNjcmlwdE5v ZGUoc1VyaSk7dGhpcy5nZXRVdGlsaXR5LnNjcmlwdChzVXJpLHthdXRvcHVyZ2U6 dHJ1ZSxvbnN1Y2Nlc3M6dXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZS5fYnVtcFBl bmRpbmdEb3duLG9uZmFpbDp1dGlsLlNjcmlwdE5vZGVEYXRhU291cmNlLl9idW1w UGVuZGluZ0Rvd259KTtyZXR1cm4gdElkO319KTtsYW5nLmF1Z21lbnRPYmplY3Qo dXRpbC5TY3JpcHROb2RlRGF0YVNvdXJjZSxEUyk7bGFuZy5hdWdtZW50T2JqZWN0 KHV0aWwuU2NyaXB0Tm9kZURhdGFTb3VyY2Use19uSWQ6MCxfblBlbmRpbmc6MCxj YWxsYmFja3M6W119KTt1dGlsLlhIUkRhdGFTb3VyY2U9ZnVuY3Rpb24ob0xpdmVE YXRhLG9Db25maWdzKXt0aGlzLmRhdGFUeXBlPURTLlRZUEVfWEhSO3RoaXMuY29u bk1ncj10aGlzLmNvbm5NZ3J8fHV0aWwuQ29ubmVjdDtvTGl2ZURhdGE9b0xpdmVE YXRhfHwiIjt1dGlsLlhIUkRhdGFTb3VyY2Uuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rv ci5jYWxsKHRoaXMsb0xpdmVEYXRhLG9Db25maWdzKTt9O2xhbmcuZXh0ZW5kKHV0 aWwuWEhSRGF0YVNvdXJjZSxEUyx7Y29ubk1ncjpudWxsLGNvbm5YaHJNb2RlOiJh bGxvd0FsbCIsY29ubk1ldGhvZFBvc3Q6ZmFsc2UsY29ublRpbWVvdXQ6MCxtYWtl Q29ubmVjdGlvbjpmdW5jdGlvbihvUmVxdWVzdCxvQ2FsbGJhY2ssb0NhbGxlcil7 dmFyIG9SYXdSZXNwb25zZT1udWxsO3ZhciB0SWQ9RFMuX25UcmFuc2FjdGlvbklk Kys7dGhpcy5maXJlRXZlbnQoInJlcXVlc3RFdmVudCIse3RJZDp0SWQscmVxdWVz dDpvUmVxdWVzdCxjYWxsYmFjazpvQ2FsbGJhY2ssY2FsbGVyOm9DYWxsZXJ9KTt2 YXIgb1NlbGY9dGhpczt2YXIgb0Nvbm5NZ3I9dGhpcy5jb25uTWdyO3ZhciBvUXVl dWU9dGhpcy5fb1F1ZXVlO3ZhciBfeGhyU3VjY2Vzcz1mdW5jdGlvbihvUmVzcG9u c2Upe2lmKG9SZXNwb25zZSYmKHRoaXMuY29ublhock1vZGU9PSJpZ25vcmVTdGFs ZVJlc3BvbnNlcyIpJiYob1Jlc3BvbnNlLnRJZCE9b1F1ZXVlLmNvbm4udElkKSl7 cmV0dXJuIG51bGw7fWVsc2V7aWYoIW9SZXNwb25zZSl7dGhpcy5maXJlRXZlbnQo ImRhdGFFcnJvckV2ZW50Iix7cmVxdWVzdDpvUmVxdWVzdCxjYWxsYmFjazpvQ2Fs bGJhY2ssY2FsbGVyOm9DYWxsZXIsbWVzc2FnZTpEUy5FUlJPUl9EQVRBTlVMTH0p O0RTLmlzc3VlQ2FsbGJhY2sob0NhbGxiYWNrLFtvUmVxdWVzdCx7ZXJyb3I6dHJ1 ZX1dLHRydWUsb0NhbGxlcik7cmV0dXJuIG51bGw7fWVsc2V7aWYodGhpcy5yZXNw b25zZVR5cGU9PT1EUy5UWVBFX1VOS05PV04pe3ZhciBjdHlwZT0ob1Jlc3BvbnNl LmdldFJlc3BvbnNlSGVhZGVyKT9vUmVzcG9uc2UuZ2V0UmVzcG9uc2VIZWFkZXJb IkNvbnRlbnQtVHlwZSJdOm51bGw7aWYoY3R5cGUpe2lmKGN0eXBlLmluZGV4T2Yo InRleHQveG1sIik+LTEpe3RoaXMucmVzcG9uc2VUeXBlPURTLlRZUEVfWE1MO31l bHNle2lmKGN0eXBlLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSl7dGhp cy5yZXNwb25zZVR5cGU9RFMuVFlQRV9KU09OO31lbHNle2lmKGN0eXBlLmluZGV4 T2YoInRleHQvcGxhaW4iKT4tMSl7dGhpcy5yZXNwb25zZVR5cGU9RFMuVFlQRV9U RVhUO319fX19dGhpcy5oYW5kbGVSZXNwb25zZShvUmVxdWVzdCxvUmVzcG9uc2Us b0NhbGxiYWNrLG9DYWxsZXIsdElkKTt9fX07dmFyIF94aHJGYWlsdXJlPWZ1bmN0 aW9uKG9SZXNwb25zZSl7dGhpcy5maXJlRXZlbnQoImRhdGFFcnJvckV2ZW50Iix7 cmVxdWVzdDpvUmVxdWVzdCxjYWxsYmFjazpvQ2FsbGJhY2ssY2FsbGVyOm9DYWxs ZXIsbWVzc2FnZTpEUy5FUlJPUl9EQVRBSU5WQUxJRH0pO2lmKGxhbmcuaXNTdHJp bmcodGhpcy5saXZlRGF0YSkmJmxhbmcuaXNTdHJpbmcob1JlcXVlc3QpJiYodGhp cy5saXZlRGF0YS5sYXN0SW5kZXhPZigiPyIpIT09dGhpcy5saXZlRGF0YS5sZW5n dGgtMSkmJihvUmVxdWVzdC5pbmRleE9mKCI/IikhPT0wKSl7fW9SZXNwb25zZT1v UmVzcG9uc2V8fHt9O29SZXNwb25zZS5lcnJvcj10cnVlO0RTLmlzc3VlQ2FsbGJh Y2sob0NhbGxiYWNrLFtvUmVxdWVzdCxvUmVzcG9uc2VdLHRydWUsb0NhbGxlcik7 cmV0dXJuIG51bGw7fTt2YXIgX3hockNhbGxiYWNrPXtzdWNjZXNzOl94aHJTdWNj ZXNzLGZhaWx1cmU6X3hockZhaWx1cmUsc2NvcGU6dGhpc307aWYobGFuZy5pc051 bWJlcih0aGlzLmNvbm5UaW1lb3V0KSl7X3hockNhbGxiYWNrLnRpbWVvdXQ9dGhp cy5jb25uVGltZW91dDt9aWYodGhpcy5jb25uWGhyTW9kZT09ImNhbmNlbFN0YWxl UmVxdWVzdHMiKXtpZihvUXVldWUuY29ubil7aWYob0Nvbm5NZ3IuYWJvcnQpe29D b25uTWdyLmFib3J0KG9RdWV1ZS5jb25uKTtvUXVldWUuY29ubj1udWxsO31lbHNl e319fWlmKG9Db25uTWdyJiZvQ29ubk1nci5hc3luY1JlcXVlc3Qpe3ZhciBzTGl2 ZURhdGE9dGhpcy5saXZlRGF0YTt2YXIgaXNQb3N0PXRoaXMuY29ubk1ldGhvZFBv c3Q7dmFyIHNNZXRob2Q9KGlzUG9zdCk/IlBPU1QiOiJHRVQiO3ZhciBzVXJpPShp c1Bvc3R8fCFsYW5nLmlzVmFsdWUob1JlcXVlc3QpKT9zTGl2ZURhdGE6c0xpdmVE YXRhK29SZXF1ZXN0O3ZhciBzUmVxdWVzdD0oaXNQb3N0KT9vUmVxdWVzdDpudWxs O2lmKHRoaXMuY29ublhock1vZGUhPSJxdWV1ZVJlcXVlc3RzIil7b1F1ZXVlLmNv bm49b0Nvbm5NZ3IuYXN5bmNSZXF1ZXN0KHNNZXRob2Qsc1VyaSxfeGhyQ2FsbGJh Y2ssc1JlcXVlc3QpO31lbHNle2lmKG9RdWV1ZS5jb25uKXt2YXIgYWxsUmVxdWVz dHM9b1F1ZXVlLnJlcXVlc3RzO2FsbFJlcXVlc3RzLnB1c2goe3JlcXVlc3Q6b1Jl cXVlc3QsY2FsbGJhY2s6X3hockNhbGxiYWNrfSk7aWYoIW9RdWV1ZS5pbnRlcnZh bCl7b1F1ZXVlLmludGVydmFsPXNldEludGVydmFsKGZ1bmN0aW9uKCl7aWYob0Nv bm5NZ3IuaXNDYWxsSW5Qcm9ncmVzcyhvUXVldWUuY29ubikpe3JldHVybjt9ZWxz ZXtpZihhbGxSZXF1ZXN0cy5sZW5ndGg+MCl7c1VyaT0oaXNQb3N0fHwhbGFuZy5p c1ZhbHVlKGFsbFJlcXVlc3RzWzBdLnJlcXVlc3QpKT9zTGl2ZURhdGE6c0xpdmVE YXRhK2FsbFJlcXVlc3RzWzBdLnJlcXVlc3Q7c1JlcXVlc3Q9KGlzUG9zdCk/YWxs UmVxdWVzdHNbMF0ucmVxdWVzdDpudWxsO29RdWV1ZS5jb25uPW9Db25uTWdyLmFz eW5jUmVxdWVzdChzTWV0aG9kLHNVcmksYWxsUmVxdWVzdHNbMF0uY2FsbGJhY2ss c1JlcXVlc3QpO2FsbFJlcXVlc3RzLnNoaWZ0KCk7fWVsc2V7Y2xlYXJJbnRlcnZh bChvUXVldWUuaW50ZXJ2YWwpO29RdWV1ZS5pbnRlcnZhbD1udWxsO319fSw1MCk7 fX1lbHNle29RdWV1ZS5jb25uPW9Db25uTWdyLmFzeW5jUmVxdWVzdChzTWV0aG9k LHNVcmksX3hockNhbGxiYWNrLHNSZXF1ZXN0KTt9fX1lbHNle0RTLmlzc3VlQ2Fs bGJhY2sob0NhbGxiYWNrLFtvUmVxdWVzdCx7ZXJyb3I6dHJ1ZX1dLHRydWUsb0Nh bGxlcik7fXJldHVybiB0SWQ7fX0pO2xhbmcuYXVnbWVudE9iamVjdCh1dGlsLlhI UkRhdGFTb3VyY2UsRFMpO3V0aWwuRGF0YVNvdXJjZT1mdW5jdGlvbihvTGl2ZURh dGEsb0NvbmZpZ3Mpe29Db25maWdzPW9Db25maWdzfHx7fTt2YXIgZGF0YVR5cGU9 b0NvbmZpZ3MuZGF0YVR5cGU7aWYoZGF0YVR5cGUpe2lmKGRhdGFUeXBlPT1EUy5U WVBFX0xPQ0FMKXtsYW5nLmF1Z21lbnRPYmplY3QodXRpbC5EYXRhU291cmNlLHV0 aWwuTG9jYWxEYXRhU291cmNlKTtyZXR1cm4gbmV3IHV0aWwuTG9jYWxEYXRhU291 cmNlKG9MaXZlRGF0YSxvQ29uZmlncyk7fWVsc2V7aWYoZGF0YVR5cGU9PURTLlRZ UEVfWEhSKXtsYW5nLmF1Z21lbnRPYmplY3QodXRpbC5EYXRhU291cmNlLHV0aWwu WEhSRGF0YVNvdXJjZSk7cmV0dXJuIG5ldyB1dGlsLlhIUkRhdGFTb3VyY2Uob0xp dmVEYXRhLG9Db25maWdzKTt9ZWxzZXtpZihkYXRhVHlwZT09RFMuVFlQRV9TQ1JJ UFROT0RFKXtsYW5nLmF1Z21lbnRPYmplY3QodXRpbC5EYXRhU291cmNlLHV0aWwu U2NyaXB0Tm9kZURhdGFTb3VyY2UpO3JldHVybiBuZXcgdXRpbC5TY3JpcHROb2Rl RGF0YVNvdXJjZShvTGl2ZURhdGEsb0NvbmZpZ3MpO31lbHNle2lmKGRhdGFUeXBl PT1EUy5UWVBFX0pTRlVOQ1RJT04pe2xhbmcuYXVnbWVudE9iamVjdCh1dGlsLkRh dGFTb3VyY2UsdXRpbC5GdW5jdGlvbkRhdGFTb3VyY2UpO3JldHVybiBuZXcgdXRp bC5GdW5jdGlvbkRhdGFTb3VyY2Uob0xpdmVEYXRhLG9Db25maWdzKTt9fX19fWlm KFlBSE9PLmxhbmcuaXNTdHJpbmcob0xpdmVEYXRhKSl7bGFuZy5hdWdtZW50T2Jq ZWN0KHV0aWwuRGF0YVNvdXJjZSx1dGlsLlhIUkRhdGFTb3VyY2UpO3JldHVybiBu ZXcgdXRpbC5YSFJEYXRhU291cmNlKG9MaXZlRGF0YSxvQ29uZmlncyk7fWVsc2V7 aWYoWUFIT08ubGFuZy5pc0Z1bmN0aW9uKG9MaXZlRGF0YSkpe2xhbmcuYXVnbWVu dE9iamVjdCh1dGlsLkRhdGFTb3VyY2UsdXRpbC5GdW5jdGlvbkRhdGFTb3VyY2Up O3JldHVybiBuZXcgdXRpbC5GdW5jdGlvbkRhdGFTb3VyY2Uob0xpdmVEYXRhLG9D b25maWdzKTt9ZWxzZXtsYW5nLmF1Z21lbnRPYmplY3QodXRpbC5EYXRhU291cmNl LHV0aWwuTG9jYWxEYXRhU291cmNlKTtyZXR1cm4gbmV3IHV0aWwuTG9jYWxEYXRh U291cmNlKG9MaXZlRGF0YSxvQ29uZmlncyk7fX19O2xhbmcuYXVnbWVudE9iamVj dCh1dGlsLkRhdGFTb3VyY2UsRFMpO30pKCk7WUFIT08udXRpbC5OdW1iZXI9e2Zv cm1hdDpmdW5jdGlvbihDLEcpe3ZhciBCPVlBSE9PLmxhbmc7aWYoIUIuaXNWYWx1 ZShDKXx8KEM9PT0iIikpe3JldHVybiIiO31HPUd8fHt9O2lmKCFCLmlzTnVtYmVy KEMpKXtDKj0xO31pZihCLmlzTnVtYmVyKEMpKXt2YXIgRT0oQzwwKTt2YXIgSz1D KyIiO3ZhciBIPShHLmRlY2ltYWxTZXBhcmF0b3IpP0cuZGVjaW1hbFNlcGFyYXRv cjoiLiI7dmFyIEk7aWYoQi5pc051bWJlcihHLmRlY2ltYWxQbGFjZXMpKXt2YXIg Sj1HLmRlY2ltYWxQbGFjZXM7dmFyIEQ9TWF0aC5wb3coMTAsSik7Sz1NYXRoLnJv dW5kKEMqRCkvRCsiIjtJPUsubGFzdEluZGV4T2YoIi4iKTtpZihKPjApe2lmKEk8 MCl7Sys9SDtJPUsubGVuZ3RoLTE7fWVsc2V7aWYoSCE9PSIuIil7Sz1LLnJlcGxh Y2UoIi4iLEgpO319d2hpbGUoKEsubGVuZ3RoLTEtSSk8Sil7Sys9IjAiO319fWlm KEcudGhvdXNhbmRzU2VwYXJhdG9yKXt2YXIgTT1HLnRob3VzYW5kc1NlcGFyYXRv cjtJPUsubGFzdEluZGV4T2YoSCk7ST0oST4tMSk/STpLLmxlbmd0aDt2YXIgTD1L LnN1YnN0cmluZyhJKTt2YXIgQT0tMTtmb3IodmFyIEY9STtGPjA7Ri0tKXtBKys7 aWYoKEElMz09PTApJiYoRiE9PUkpJiYoIUV8fChGPjEpKSl7TD1NK0w7fUw9Sy5j aGFyQXQoRi0xKStMO31LPUw7fUs9KEcucHJlZml4KT9HLnByZWZpeCtLOks7Sz0o Ry5zdWZmaXgpP0srRy5zdWZmaXg6SztyZXR1cm4gSzt9ZWxzZXtyZXR1cm4gQzt9 fX07KGZ1bmN0aW9uKCl7dmFyIEE9ZnVuY3Rpb24oQyxFLEQpe2lmKHR5cGVvZiBE PT09InVuZGVmaW5lZCIpe0Q9MTA7fWZvcig7cGFyc2VJbnQoQywxMCk8RCYmRD4x O0QvPTEwKXtDPUUudG9TdHJpbmcoKStDO31yZXR1cm4gQy50b1N0cmluZygpO307 dmFyIEI9e2Zvcm1hdHM6e2E6ZnVuY3Rpb24oRCxDKXtyZXR1cm4gQy5hW0QuZ2V0 RGF5KCldO30sQTpmdW5jdGlvbihELEMpe3JldHVybiBDLkFbRC5nZXREYXkoKV07 fSxiOmZ1bmN0aW9uKEQsQyl7cmV0dXJuIEMuYltELmdldE1vbnRoKCldO30sQjpm dW5jdGlvbihELEMpe3JldHVybiBDLkJbRC5nZXRNb250aCgpXTt9LEM6ZnVuY3Rp b24oQyl7cmV0dXJuIEEocGFyc2VJbnQoQy5nZXRGdWxsWWVhcigpLzEwMCwxMCks MCk7fSxkOlsiZ2V0RGF0ZSIsIjAiXSxlOlsiZ2V0RGF0ZSIsIiAiXSxnOmZ1bmN0 aW9uKEMpe3JldHVybiBBKHBhcnNlSW50KEIuZm9ybWF0cy5HKEMpJTEwMCwxMCks MCk7fSxHOmZ1bmN0aW9uKEUpe3ZhciBGPUUuZ2V0RnVsbFllYXIoKTt2YXIgRD1w YXJzZUludChCLmZvcm1hdHMuVihFKSwxMCk7dmFyIEM9cGFyc2VJbnQoQi5mb3Jt YXRzLlcoRSksMTApO2lmKEM+RCl7RisrO31lbHNle2lmKEM9PT0wJiZEPj01Mil7 Ri0tO319cmV0dXJuIEY7fSxIOlsiZ2V0SG91cnMiLCIwIl0sSTpmdW5jdGlvbihE KXt2YXIgQz1ELmdldEhvdXJzKCklMTI7cmV0dXJuIEEoQz09PTA/MTI6QywwKTt9 LGo6ZnVuY3Rpb24oRyl7dmFyIEY9bmV3IERhdGUoIiIrRy5nZXRGdWxsWWVhcigp KyIvMS8xIEdNVCIpO3ZhciBEPW5ldyBEYXRlKCIiK0cuZ2V0RnVsbFllYXIoKSsi LyIrKEcuZ2V0TW9udGgoKSsxKSsiLyIrRy5nZXREYXRlKCkrIiBHTVQiKTt2YXIg Qz1ELUY7dmFyIEU9cGFyc2VJbnQoQy82MDAwMC82MC8yNCwxMCkrMTtyZXR1cm4g QShFLDAsMTAwKTt9LGs6WyJnZXRIb3VycyIsIiAiXSxsOmZ1bmN0aW9uKEQpe3Zh ciBDPUQuZ2V0SG91cnMoKSUxMjtyZXR1cm4gQShDPT09MD8xMjpDLCIgIik7fSxt OmZ1bmN0aW9uKEMpe3JldHVybiBBKEMuZ2V0TW9udGgoKSsxLDApO30sTTpbImdl dE1pbnV0ZXMiLCIwIl0scDpmdW5jdGlvbihELEMpe3JldHVybiBDLnBbRC5nZXRI b3VycygpPj0xMj8xOjBdO30sUDpmdW5jdGlvbihELEMpe3JldHVybiBDLlBbRC5n ZXRIb3VycygpPj0xMj8xOjBdO30sczpmdW5jdGlvbihELEMpe3JldHVybiBwYXJz ZUludChELmdldFRpbWUoKS8xMDAwLDEwKTt9LFM6WyJnZXRTZWNvbmRzIiwiMCJd LHU6ZnVuY3Rpb24oQyl7dmFyIEQ9Qy5nZXREYXkoKTtyZXR1cm4gRD09PTA/NzpE O30sVTpmdW5jdGlvbihGKXt2YXIgQz1wYXJzZUludChCLmZvcm1hdHMuaihGKSwx MCk7dmFyIEU9Ni1GLmdldERheSgpO3ZhciBEPXBhcnNlSW50KChDK0UpLzcsMTAp O3JldHVybiBBKEQsMCk7fSxWOmZ1bmN0aW9uKEYpe3ZhciBFPXBhcnNlSW50KEIu Zm9ybWF0cy5XKEYpLDEwKTt2YXIgQz0obmV3IERhdGUoIiIrRi5nZXRGdWxsWWVh cigpKyIvMS8xIikpLmdldERheSgpO3ZhciBEPUUrKEM+NHx8Qzw9MT8wOjEpO2lm KEQ9PT01MyYmKG5ldyBEYXRlKCIiK0YuZ2V0RnVsbFllYXIoKSsiLzEyLzMxIikp LmdldERheSgpPDQpe0Q9MTt9ZWxzZXtpZihEPT09MCl7RD1CLmZvcm1hdHMuVihu ZXcgRGF0ZSgiIisoRi5nZXRGdWxsWWVhcigpLTEpKyIvMTIvMzEiKSk7fX1yZXR1 cm4gQShELDApO30sdzoiZ2V0RGF5IixXOmZ1bmN0aW9uKEYpe3ZhciBDPXBhcnNl SW50KEIuZm9ybWF0cy5qKEYpLDEwKTt2YXIgRT03LUIuZm9ybWF0cy51KEYpO3Zh ciBEPXBhcnNlSW50KChDK0UpLzcsMTApO3JldHVybiBBKEQsMCwxMCk7fSx5OmZ1 bmN0aW9uKEMpe3JldHVybiBBKEMuZ2V0RnVsbFllYXIoKSUxMDAsMCk7fSxZOiJn ZXRGdWxsWWVhciIsejpmdW5jdGlvbihFKXt2YXIgRD1FLmdldFRpbWV6b25lT2Zm c2V0KCk7dmFyIEM9QShwYXJzZUludChNYXRoLmFicyhELzYwKSwxMCksMCk7dmFy IEY9QShNYXRoLmFicyhEJTYwKSwwKTtyZXR1cm4oRD4wPyItIjoiKyIpK0MrRjt9 LFo6ZnVuY3Rpb24oQyl7dmFyIEQ9Qy50b1N0cmluZygpLnJlcGxhY2UoL14uKjpc ZFxkKCBHTVRbKy1dXGQrKT8gXCg/KFtBLVphLXogXSspXCk/XGQqJC8sIiQyIiku cmVwbGFjZSgvW2EteiBdL2csIiIpO2lmKEQubGVuZ3RoPjQpe0Q9Qi5mb3JtYXRz LnooQyk7fXJldHVybiBEO30sIiUiOmZ1bmN0aW9uKEMpe3JldHVybiIlIjt9fSxh Z2dyZWdhdGVzOntjOiJsb2NhbGUiLEQ6IiVtLyVkLyV5IixGOiIlWS0lbS0lZCIs aDoiJWIiLG46IlxuIixyOiJsb2NhbGUiLFI6IiVIOiVNIix0OiJcdCIsVDoiJUg6 JU06JVMiLHg6ImxvY2FsZSIsWDoibG9jYWxlIn0sZm9ybWF0OmZ1bmN0aW9uKEcs RixEKXtGPUZ8fHt9O2lmKCEoRyBpbnN0YW5jZW9mIERhdGUpKXtyZXR1cm4gWUFI T08ubGFuZy5pc1ZhbHVlKEcpP0c6IiI7fXZhciBIPUYuZm9ybWF0fHwiJW0vJWQv JVkiO2lmKEg9PT0iWVlZWS9NTS9ERCIpe0g9IiVZLyVtLyVkIjt9ZWxzZXtpZihI PT09IkREL01NL1lZWVkiKXtIPSIlZC8lbS8lWSI7fWVsc2V7aWYoSD09PSJNTS9E RC9ZWVlZIil7SD0iJW0vJWQvJVkiO319fUQ9RHx8ImVuIjtpZighKEQgaW4gWUFI T08udXRpbC5EYXRlTG9jYWxlKSl7aWYoRC5yZXBsYWNlKC8tW2EtekEtWl0rJC8s IiIpaW4gWUFIT08udXRpbC5EYXRlTG9jYWxlKXtEPUQucmVwbGFjZSgvLVthLXpB LVpdKyQvLCIiKTt9ZWxzZXtEPSJlbiI7fX12YXIgSj1ZQUhPTy51dGlsLkRhdGVM b2NhbGVbRF07dmFyIEM9ZnVuY3Rpb24oTCxLKXt2YXIgTT1CLmFnZ3JlZ2F0ZXNb S107cmV0dXJuKE09PT0ibG9jYWxlIj9KW0tdOk0pO307dmFyIEU9ZnVuY3Rpb24o TCxLKXt2YXIgTT1CLmZvcm1hdHNbS107aWYodHlwZW9mIE09PT0ic3RyaW5nIil7 cmV0dXJuIEdbTV0oKTt9ZWxzZXtpZih0eXBlb2YgTT09PSJmdW5jdGlvbiIpe3Jl dHVybiBNLmNhbGwoRyxHLEopO31lbHNle2lmKHR5cGVvZiBNPT09Im9iamVjdCIm JnR5cGVvZiBNWzBdPT09InN0cmluZyIpe3JldHVybiBBKEdbTVswXV0oKSxNWzFd KTt9ZWxzZXtyZXR1cm4gSzt9fX19O3doaWxlKEgubWF0Y2goLyVbY0RGaG5yUnRU eFhdLykpe0g9SC5yZXBsYWNlKC8lKFtjREZobnJSdFR4WF0pL2csQyk7fXZhciBJ PUgucmVwbGFjZSgvJShbYUFiQkNkZWdHSElqa2xtTXBQc1N1VVZ3V3lZelolXSkv ZyxFKTtDPUU9dW5kZWZpbmVkO3JldHVybiBJO319O1lBSE9PLm5hbWVzcGFjZSgi WUFIT08udXRpbCIpO1lBSE9PLnV0aWwuRGF0ZT1CO1lBSE9PLnV0aWwuRGF0ZUxv Y2FsZT17YTpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNh dCJdLEE6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5Iiwi VGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGI6WyJKYW4iLCJGZWIiLCJN YXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJO b3YiLCJEZWMiXSxCOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJp bCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0 b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxjOiIlYSAlZCAlYiAlWSAlVCAl WiIscDpbIkFNIiwiUE0iXSxQOlsiYW0iLCJwbSJdLHI6IiVJOiVNOiVTICVwIix4 OiIlZC8lbS8leSIsWDoiJVQifTtZQUhPTy51dGlsLkRhdGVMb2NhbGVbImVuIl09 WUFIT08ubGFuZy5tZXJnZShZQUhPTy51dGlsLkRhdGVMb2NhbGUse30pO1lBSE9P LnV0aWwuRGF0ZUxvY2FsZVsiZW4tVVMiXT1ZQUhPTy5sYW5nLm1lcmdlKFlBSE9P LnV0aWwuRGF0ZUxvY2FsZVsiZW4iXSx7YzoiJWEgJWQgJWIgJVkgJUk6JU06JVMg JXAgJVoiLHg6IiVtLyVkLyVZIixYOiIlSTolTTolUyAlcCJ9KTtZQUhPTy51dGls LkRhdGVMb2NhbGVbImVuLUdCIl09WUFIT08ubGFuZy5tZXJnZShZQUhPTy51dGls LkRhdGVMb2NhbGVbImVuIl0se3I6IiVsOiVNOiVTICVQICVaIn0pO1lBSE9PLnV0 aWwuRGF0ZUxvY2FsZVsiZW4tQVUiXT1ZQUhPTy5sYW5nLm1lcmdlKFlBSE9PLnV0 aWwuRGF0ZUxvY2FsZVsiZW4iXSk7fSkoKTtZQUhPTy5yZWdpc3RlcigiZGF0YXNv dXJjZSIsWUFIT08udXRpbC5EYXRhU291cmNlLHt2ZXJzaW9uOiIyLjcuMCIsYnVp bGQ6IjE3OTkifSk7WUFIT08ubmFtZXNwYWNlKCJkZWNvbmNlcHQiKTtZQUhPTy5k ZWNvbmNlcHQ9WUFIT08uZGVjb25jZXB0fHx7fTtpZih0eXBlb2YgWUFIT08uZGVj b25jZXB0LnV0aWw9PSJ1bmRlZmluZWQifHwhWUFIT08uZGVjb25jZXB0LnV0aWwp e1lBSE9PLmRlY29uY2VwdC51dGlsPXt9O31pZih0eXBlb2YgWUFIT08uZGVjb25j ZXB0LlNXRk9iamVjdFV0aWw9PSJ1bmRlZmluZWQifHwhWUFIT08uZGVjb25jZXB0 LlNXRk9iamVjdFV0aWwpe1lBSE9PLmRlY29uY2VwdC5TV0ZPYmplY3RVdGlsPXt9 O31ZQUhPTy5kZWNvbmNlcHQuU1dGT2JqZWN0PWZ1bmN0aW9uKEUsQyxLLEYsSCxK LEwsRyxBLEQpe2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCl7cmV0dXJuO310 aGlzLkRFVEVDVF9LRVk9RD9EOiJkZXRlY3RmbGFzaCI7dGhpcy5za2lwRGV0ZWN0 PVlBSE9PLmRlY29uY2VwdC51dGlsLmdldFJlcXVlc3RQYXJhbWV0ZXIodGhpcy5E RVRFQ1RfS0VZKTt0aGlzLnBhcmFtcz17fTt0aGlzLnZhcmlhYmxlcz17fTt0aGlz LmF0dHJpYnV0ZXM9W107aWYoRSl7dGhpcy5zZXRBdHRyaWJ1dGUoInN3ZiIsRSk7 fWlmKEMpe3RoaXMuc2V0QXR0cmlidXRlKCJpZCIsQyk7fWlmKEspe3RoaXMuc2V0 QXR0cmlidXRlKCJ3aWR0aCIsSyk7fWlmKEYpe3RoaXMuc2V0QXR0cmlidXRlKCJo ZWlnaHQiLEYpO31pZihIKXt0aGlzLnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsbmV3 IFlBSE9PLmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKEgudG9TdHJpbmcoKS5zcGxp dCgiLiIpKSk7fXRoaXMuaW5zdGFsbGVkVmVyPVlBSE9PLmRlY29uY2VwdC5TV0ZP YmplY3RVdGlsLmdldFBsYXllclZlcnNpb24oKTtpZighd2luZG93Lm9wZXJhJiZk b2N1bWVudC5hbGwmJnRoaXMuaW5zdGFsbGVkVmVyLm1ham9yPjcpe1lBSE9PLmRl Y29uY2VwdC5TV0ZPYmplY3QuZG9QcmVwVW5sb2FkPXRydWU7fWlmKEope3RoaXMu YWRkUGFyYW0oImJnY29sb3IiLEopO312YXIgQj1MP0w6ImhpZ2giO3RoaXMuYWRk UGFyYW0oInF1YWxpdHkiLEIpO3RoaXMuc2V0QXR0cmlidXRlKCJ1c2VFeHByZXNz SW5zdGFsbCIsZmFsc2UpO3RoaXMuc2V0QXR0cmlidXRlKCJkb0V4cHJlc3NJbnN0 YWxsIixmYWxzZSk7dmFyIEk9KEcpP0c6d2luZG93LmxvY2F0aW9uO3RoaXMuc2V0 QXR0cmlidXRlKCJ4aVJlZGlyZWN0VXJsIixJKTt0aGlzLnNldEF0dHJpYnV0ZSgi cmVkaXJlY3RVcmwiLCIiKTtpZihBKXt0aGlzLnNldEF0dHJpYnV0ZSgicmVkaXJl Y3RVcmwiLEEpO319O1lBSE9PLmRlY29uY2VwdC5TV0ZPYmplY3QucHJvdG90eXBl PXt1c2VFeHByZXNzSW5zdGFsbDpmdW5jdGlvbihBKXt0aGlzLnhpU1dGUGF0aD0h QT8iZXhwcmVzc2luc3RhbGwuc3dmIjpBO3RoaXMuc2V0QXR0cmlidXRlKCJ1c2VF eHByZXNzSW5zdGFsbCIsdHJ1ZSk7fSxzZXRBdHRyaWJ1dGU6ZnVuY3Rpb24oQSxC KXt0aGlzLmF0dHJpYnV0ZXNbQV09Qjt9LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihB KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW0FdO30sYWRkUGFyYW06ZnVuY3Rpb24o QSxCKXt0aGlzLnBhcmFtc1tBXT1CO30sZ2V0UGFyYW1zOmZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMucGFyYW1zO30sYWRkVmFyaWFibGU6ZnVuY3Rpb24oQSxCKXt0aGlz LnZhcmlhYmxlc1tBXT1CO30sZ2V0VmFyaWFibGU6ZnVuY3Rpb24oQSl7cmV0dXJu IHRoaXMudmFyaWFibGVzW0FdO30sZ2V0VmFyaWFibGVzOmZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMudmFyaWFibGVzO30sZ2V0VmFyaWFibGVQYWlyczpmdW5jdGlvbigp e3ZhciBBPVtdO3ZhciBCO3ZhciBDPXRoaXMuZ2V0VmFyaWFibGVzKCk7Zm9yKEIg aW4gQyl7aWYoQy5oYXNPd25Qcm9wZXJ0eShCKSl7QVtBLmxlbmd0aF09QisiPSIr Q1tCXTt9fXJldHVybiBBO30sZ2V0U1dGSFRNTDpmdW5jdGlvbigpe3ZhciBEPSIi O3ZhciBDPXt9O3ZhciBBPSIiO3ZhciBCPSIiO2lmKG5hdmlnYXRvci5wbHVnaW5z JiZuYXZpZ2F0b3IubWltZVR5cGVzJiZuYXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0 aCl7aWYodGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKSl7dGhp cy5hZGRWYXJpYWJsZSgiTU1wbGF5ZXJUeXBlIiwiUGx1Z0luIik7dGhpcy5zZXRB dHRyaWJ1dGUoInN3ZiIsdGhpcy54aVNXRlBhdGgpO31EPSc8ZW1iZWQgdHlwZT0i YXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIHNyYz0iJyt0aGlzLmdldEF0 dHJpYnV0ZSgic3dmIikrJyIgd2lkdGg9IicrdGhpcy5nZXRBdHRyaWJ1dGUoIndp ZHRoIikrJyIgaGVpZ2h0PSInK3RoaXMuZ2V0QXR0cmlidXRlKCJoZWlnaHQiKSsn IiBzdHlsZT0iJyt0aGlzLmdldEF0dHJpYnV0ZSgic3R5bGUiKSsnIic7RCs9JyBp ZD0iJyt0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKSsnIiBuYW1lPSInK3RoaXMuZ2V0 QXR0cmlidXRlKCJpZCIpKyciICc7Qz10aGlzLmdldFBhcmFtcygpO2ZvcihBIGlu IEMpe2lmKEMuaGFzT3duUHJvcGVydHkoQSkpe0QrPVtBXSsnPSInK0NbQV0rJyIg Jzt9fUI9dGhpcy5nZXRWYXJpYWJsZVBhaXJzKCkuam9pbigiJiIpO2lmKEIubGVu Z3RoPjApe0QrPSdmbGFzaHZhcnM9IicrQisnIic7fUQrPSIvPiI7fWVsc2V7aWYo dGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKSl7dGhpcy5hZGRW YXJpYWJsZSgiTU1wbGF5ZXJUeXBlIiwiQWN0aXZlWCIpO3RoaXMuc2V0QXR0cmli dXRlKCJzd2YiLHRoaXMueGlTV0ZQYXRoKTt9RD0nPG9iamVjdCBpZD0iJyt0aGlz LmdldEF0dHJpYnV0ZSgiaWQiKSsnIiBjbGFzc2lkPSJjbHNpZDpEMjdDREI2RS1B RTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiIHdpZHRoPSInK3RoaXMuZ2V0QXR0 cmlidXRlKCJ3aWR0aCIpKyciIGhlaWdodD0iJyt0aGlzLmdldEF0dHJpYnV0ZSgi aGVpZ2h0IikrJyIgc3R5bGU9IicrdGhpcy5nZXRBdHRyaWJ1dGUoInN0eWxlIikr JyI+JztEKz0nPHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0iJyt0aGlzLmdldEF0 dHJpYnV0ZSgic3dmIikrJyIgLz4nO0M9dGhpcy5nZXRQYXJhbXMoKTtmb3IoQSBp biBDKXtpZihDLmhhc093blByb3BlcnR5KEEpKXtEKz0nPHBhcmFtIG5hbWU9Iicr QSsnIiB2YWx1ZT0iJytDW0FdKyciIC8+Jzt9fUI9dGhpcy5nZXRWYXJpYWJsZVBh aXJzKCkuam9pbigiJiIpO2lmKEIubGVuZ3RoPjApe0QrPSc8cGFyYW0gbmFtZT0i Zmxhc2h2YXJzIiB2YWx1ZT0iJytCKyciIC8+Jzt9RCs9Ijwvb2JqZWN0PiI7fXJl dHVybiBEO30sd3JpdGU6ZnVuY3Rpb24oQSl7aWYodGhpcy5nZXRBdHRyaWJ1dGUo InVzZUV4cHJlc3NJbnN0YWxsIikpe3ZhciBCPW5ldyBZQUhPTy5kZWNvbmNlcHQu UGxheWVyVmVyc2lvbihbNiwwLDY1XSk7aWYodGhpcy5pbnN0YWxsZWRWZXIudmVy c2lvbklzVmFsaWQoQikmJiF0aGlzLmluc3RhbGxlZFZlci52ZXJzaW9uSXNWYWxp ZCh0aGlzLmdldEF0dHJpYnV0ZSgidmVyc2lvbiIpKSl7dGhpcy5zZXRBdHRyaWJ1 dGUoImRvRXhwcmVzc0luc3RhbGwiLHRydWUpO3RoaXMuYWRkVmFyaWFibGUoIk1N cmVkaXJlY3RVUkwiLGVzY2FwZSh0aGlzLmdldEF0dHJpYnV0ZSgieGlSZWRpcmVj dFVybCIpKSk7ZG9jdW1lbnQudGl0bGU9ZG9jdW1lbnQudGl0bGUuc2xpY2UoMCw0 NykrIiAtIEZsYXNoIFBsYXllciBJbnN0YWxsYXRpb24iO3RoaXMuYWRkVmFyaWFi bGUoIk1NZG9jdGl0bGUiLGRvY3VtZW50LnRpdGxlKTt9fWlmKHRoaXMuc2tpcERl dGVjdHx8dGhpcy5nZXRBdHRyaWJ1dGUoImRvRXhwcmVzc0luc3RhbGwiKXx8dGhp cy5pbnN0YWxsZWRWZXIudmVyc2lvbklzVmFsaWQodGhpcy5nZXRBdHRyaWJ1dGUo InZlcnNpb24iKSkpe3ZhciBDPSh0eXBlb2YgQT09InN0cmluZyIpP2RvY3VtZW50 LmdldEVsZW1lbnRCeUlkKEEpOkE7Qy5pbm5lckhUTUw9dGhpcy5nZXRTV0ZIVE1M KCk7cmV0dXJuIHRydWU7fWVsc2V7aWYodGhpcy5nZXRBdHRyaWJ1dGUoInJlZGly ZWN0VXJsIikhPT0iIil7ZG9jdW1lbnQubG9jYXRpb24ucmVwbGFjZSh0aGlzLmdl dEF0dHJpYnV0ZSgicmVkaXJlY3RVcmwiKSk7fX1yZXR1cm4gZmFsc2U7fX07WUFI T08uZGVjb25jZXB0LlNXRk9iamVjdFV0aWwuZ2V0UGxheWVyVmVyc2lvbj1mdW5j dGlvbigpe3ZhciBEPW51bGw7dmFyIEM9bmV3IFlBSE9PLmRlY29uY2VwdC5QbGF5 ZXJWZXJzaW9uKFswLDAsMF0pO2lmKG5hdmlnYXRvci5wbHVnaW5zJiZuYXZpZ2F0 b3IubWltZVR5cGVzLmxlbmd0aCl7dmFyIEE9bmF2aWdhdG9yLnBsdWdpbnNbIlNo b2Nrd2F2ZSBGbGFzaCJdO2lmKEEmJkEuZGVzY3JpcHRpb24pe0M9bmV3IFlBSE9P LmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKEEuZGVzY3JpcHRpb24ucmVwbGFjZSgv KFthLXpBLVpdfFxzKSsvLCIiKS5yZXBsYWNlKC8oXHMrcnxccytiWzAtOV0rKS8s Ii4iKS5zcGxpdCgiLiIpKTt9fWVsc2V7aWYobmF2aWdhdG9yLnVzZXJBZ2VudCYm bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJXaW5kb3dzIENFIik+PTApe3Zh ciBCPTM7d2hpbGUoRCl7dHJ5e0IrKztEPW5ldyBBY3RpdmVYT2JqZWN0KCJTaG9j a3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaC4iK0IpO0M9bmV3IFlBSE9PLmRlY29u Y2VwdC5QbGF5ZXJWZXJzaW9uKFtCLDAsMF0pO31jYXRjaChFKXtEPW51bGw7fX19 ZWxzZXt0cnl7RD1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hv Y2t3YXZlRmxhc2guNyIpO31jYXRjaChFKXt0cnl7RD1uZXcgQWN0aXZlWE9iamVj dCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNiIpO0M9bmV3IFlBSE9P LmRlY29uY2VwdC5QbGF5ZXJWZXJzaW9uKFs2LDAsMjFdKTtELkFsbG93U2NyaXB0 QWNjZXNzPSJhbHdheXMiO31jYXRjaChFKXtpZihDLm1ham9yPT02KXtyZXR1cm4g Qzt9fXRyeXtEPW5ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9j a3dhdmVGbGFzaCIpO31jYXRjaChFKXt9fWlmKEQhPT1udWxsKXtDPW5ldyBZQUhP Ty5kZWNvbmNlcHQuUGxheWVyVmVyc2lvbihELkdldFZhcmlhYmxlKCIkdmVyc2lv biIpLnNwbGl0KCIgIilbMV0uc3BsaXQoIiwiKSk7fX19cmV0dXJuIEM7fTtZQUhP Ty5kZWNvbmNlcHQuUGxheWVyVmVyc2lvbj1mdW5jdGlvbihBKXt0aGlzLm1ham9y PUFbMF0hPT1udWxsP3BhcnNlSW50KEFbMF0sMCk6MDt0aGlzLm1pbm9yPUFbMV0h PT1udWxsP3BhcnNlSW50KEFbMV0sMCk6MDt0aGlzLnJldj1BWzJdIT09bnVsbD9w YXJzZUludChBWzJdLDApOjA7fTtZQUhPTy5kZWNvbmNlcHQuUGxheWVyVmVyc2lv bi5wcm90b3R5cGUudmVyc2lvbklzVmFsaWQ9ZnVuY3Rpb24oQSl7aWYodGhpcy5t YWpvcjxBLm1ham9yKXtyZXR1cm4gZmFsc2U7fWlmKHRoaXMubWFqb3I+QS5tYWpv cil7cmV0dXJuIHRydWU7fWlmKHRoaXMubWlub3I8QS5taW5vcil7cmV0dXJuIGZh bHNlO31pZih0aGlzLm1pbm9yPkEubWlub3Ipe3JldHVybiB0cnVlO31pZih0aGlz LnJldjxBLnJldil7cmV0dXJuIGZhbHNlO31yZXR1cm4gdHJ1ZTt9O1lBSE9PLmRl Y29uY2VwdC51dGlsPXtnZXRSZXF1ZXN0UGFyYW1ldGVyOmZ1bmN0aW9uKEQpe3Zh ciBDPWRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaHx8ZG9jdW1lbnQubG9jYXRpb24u aGFzaDtpZihEPT09bnVsbCl7cmV0dXJuIEM7fWlmKEMpe3ZhciBCPUMuc3Vic3Ry aW5nKDEpLnNwbGl0KCImIik7Zm9yKHZhciBBPTA7QTxCLmxlbmd0aDtBKyspe2lm KEJbQV0uc3Vic3RyaW5nKDAsQltBXS5pbmRleE9mKCI9IikpPT1EKXtyZXR1cm4g QltBXS5zdWJzdHJpbmcoKEJbQV0uaW5kZXhPZigiPSIpKzEpKTt9fX1yZXR1cm4i Ijt9fTtZQUhPTy5kZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5jbGVhbnVwU1dGcz1m dW5jdGlvbigpe3ZhciBDPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJP QkpFQ1QiKTtmb3IodmFyIEI9Qy5sZW5ndGgtMTtCPj0wO0ItLSl7Q1tCXS5zdHls ZS5kaXNwbGF5PSJub25lIjtmb3IodmFyIEEgaW4gQ1tCXSl7aWYodHlwZW9mIENb Ql1bQV09PSJmdW5jdGlvbiIpe0NbQl1bQV09ZnVuY3Rpb24oKXt9O319fX07aWYo WUFIT08uZGVjb25jZXB0LlNXRk9iamVjdC5kb1ByZXBVbmxvYWQpe2lmKCFZQUhP Ty5kZWNvbmNlcHQudW5sb2FkU2V0KXtZQUhPTy5kZWNvbmNlcHQuU1dGT2JqZWN0 VXRpbC5wcmVwVW5sb2FkPWZ1bmN0aW9uKCl7X19mbGFzaF91bmxvYWRIYW5kbGVy PWZ1bmN0aW9uKCl7fTtfX2ZsYXNoX3NhdmVkVW5sb2FkSGFuZGxlcj1mdW5jdGlv bigpe307d2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsWUFIT08uZGVjb25j ZXB0LlNXRk9iamVjdFV0aWwuY2xlYW51cFNXRnMpO307d2luZG93LmF0dGFjaEV2 ZW50KCJvbmJlZm9yZXVubG9hZCIsWUFIT08uZGVjb25jZXB0LlNXRk9iamVjdFV0 aWwucHJlcFVubG9hZCk7WUFIT08uZGVjb25jZXB0LnVubG9hZFNldD10cnVlO319 aWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkJiZkb2N1bWVudC5hbGwpe2RvY3Vt ZW50LmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKEEpe3JldHVybiBkb2N1bWVudC5h bGxbQV07fTt9WUFIT08ud2lkZ2V0LkZsYXNoQWRhcHRlcj1mdW5jdGlvbihELEEs Qil7dGhpcy5fcXVldWU9dGhpcy5fcXVldWV8fFtdO3RoaXMuX2V2ZW50cz10aGlz Ll9ldmVudHN8fHt9O3RoaXMuX2NvbmZpZ3M9dGhpcy5fY29uZmlnc3x8e307Qj1C fHx7fTt0aGlzLl9pZD1CLmlkPUIuaWR8fFlBSE9PLnV0aWwuRG9tLmdlbmVyYXRl SWQobnVsbCwieXVpZ2VuIik7Qi52ZXJzaW9uPUIudmVyc2lvbnx8IjkuMC40NSI7 Qi5iYWNrZ3JvdW5kQ29sb3I9Qi5iYWNrZ3JvdW5kQ29sb3J8fCIjZmZmZmZmIjt0 aGlzLl9hdHRyaWJ1dGVzPUI7dGhpcy5fc3dmVVJMPUQ7dGhpcy5fY29udGFpbmVy SUQ9QTt0aGlzLl9lbWJlZFNXRih0aGlzLl9zd2ZVUkwsdGhpcy5fY29udGFpbmVy SUQsQi5pZCxCLnZlcnNpb24sQi5iYWNrZ3JvdW5kQ29sb3IsQi5leHByZXNzSW5z dGFsbCxCLndtb2RlKTt0cnl7dGhpcy5jcmVhdGVFdmVudCgiY29udGVudFJlYWR5 Iik7fWNhdGNoKEMpe319O1lBSE9PLmV4dGVuZChZQUhPTy53aWRnZXQuRmxhc2hB ZGFwdGVyLFlBSE9PLnV0aWwuQXR0cmlidXRlUHJvdmlkZXIse19zd2ZVUkw6bnVs bCxfY29udGFpbmVySUQ6bnVsbCxfc3dmOm51bGwsX2lkOm51bGwsX2luaXRpYWxp emVkOmZhbHNlLF9hdHRyaWJ1dGVzOm51bGwsdG9TdHJpbmc6ZnVuY3Rpb24oKXty ZXR1cm4iRmxhc2hBZGFwdGVyICIrdGhpcy5faWQ7fSxkZXN0cm95OmZ1bmN0aW9u KCl7aWYodGhpcy5fc3dmKXt2YXIgQj1ZQUhPTy51dGlsLkRvbS5nZXQodGhpcy5f Y29udGFpbmVySUQpO0IucmVtb3ZlQ2hpbGQodGhpcy5fc3dmKTt9dmFyIEE9dGhp cy5faWQ7Zm9yKHZhciBDIGluIHRoaXMpe2lmKFlBSE9PLmxhbmcuaGFzT3duUHJv cGVydHkodGhpcyxDKSl7dGhpc1tDXT1udWxsO319fSxfZW1iZWRTV0Y6ZnVuY3Rp b24oSSxILEQsQyxGLEcsQil7dmFyIEU9bmV3IFlBSE9PLmRlY29uY2VwdC5TV0ZP YmplY3QoSSxELCIxMDAlIiwiMTAwJSIsQyxGKTtpZihHKXtFLnVzZUV4cHJlc3NJ bnN0YWxsKEcpO31FLmFkZFBhcmFtKCJhbGxvd1NjcmlwdEFjY2VzcyIsImFsd2F5 cyIpO2lmKEIpe0UuYWRkUGFyYW0oIndtb2RlIixCKTt9RS5hZGRWYXJpYWJsZSgi YWxsb3dlZERvbWFpbiIsZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUpO0UuYWRk VmFyaWFibGUoImVsZW1lbnRJRCIsRCk7RS5hZGRWYXJpYWJsZSgiZXZlbnRIYW5k bGVyIiwiWUFIT08ud2lkZ2V0LkZsYXNoQWRhcHRlci5ldmVudEhhbmRsZXIiKTt2 YXIgQT1ZQUhPTy51dGlsLkRvbS5nZXQoSCk7dmFyIEo9RS53cml0ZShBKTtpZihK KXt0aGlzLl9zd2Y9WUFIT08udXRpbC5Eb20uZ2V0KEQpO3RoaXMuX3N3Zi5vd25l cj10aGlzO31lbHNle319LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24oQil7dmFyIEE9 Qi50eXBlO3N3aXRjaChBKXtjYXNlInN3ZlJlYWR5Ijp0aGlzLl9sb2FkSGFuZGxl cigpO3RoaXMuZmlyZUV2ZW50KCJjb250ZW50UmVhZHkiKTtyZXR1cm47Y2FzZSJs b2ciOnJldHVybjt9dGhpcy5maXJlRXZlbnQoQSxCKTt9LF9sb2FkSGFuZGxlcjpm dW5jdGlvbigpe3RoaXMuX2luaXRpYWxpemVkPWZhbHNlO3RoaXMuX2luaXRBdHRy aWJ1dGVzKHRoaXMuX2F0dHJpYnV0ZXMpO3RoaXMuc2V0QXR0cmlidXRlcyh0aGlz Ll9hdHRyaWJ1dGVzLHRydWUpO3RoaXMuX2luaXRpYWxpemVkPXRydWU7fSxzZXQ6 ZnVuY3Rpb24oQSxCKXt0aGlzLl9hdHRyaWJ1dGVzW0FdPUI7WUFIT08ud2lkZ2V0 LkZsYXNoQWRhcHRlci5zdXBlcmNsYXNzLnNldC5jYWxsKHRoaXMsQSxCKTt9LF9p bml0QXR0cmlidXRlczpmdW5jdGlvbihBKXt0aGlzLmdldEF0dHJpYnV0ZUNvbmZp ZygiYWx0VGV4dCIse21ldGhvZDp0aGlzLl9nZXRBbHRUZXh0fSk7dGhpcy5zZXRB dHRyaWJ1dGVDb25maWcoImFsdFRleHQiLHttZXRob2Q6dGhpcy5fc2V0QWx0VGV4 dH0pO3RoaXMuZ2V0QXR0cmlidXRlQ29uZmlnKCJzd2ZVUkwiLHttZXRob2Q6dGhp cy5fZ2V0U1dGVVJMfSk7fSxfZ2V0U1dGVVJMOmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMuX3N3ZlVSTDt9LF9nZXRBbHRUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu X3N3Zi5nZXRBbHRUZXh0KCk7fSxfc2V0QWx0VGV4dDpmdW5jdGlvbihBKXtyZXR1 cm4gdGhpcy5fc3dmLnNldEFsdFRleHQoQSk7fX0pO1lBSE9PLndpZGdldC5GbGFz aEFkYXB0ZXIuZXZlbnRIYW5kbGVyPWZ1bmN0aW9uKEEsQyl7dmFyIEI9WUFIT08u dXRpbC5Eb20uZ2V0KEEpO2lmKCFCLm93bmVyKXtzZXRUaW1lb3V0KGZ1bmN0aW9u KCl7WUFIT08ud2lkZ2V0LkZsYXNoQWRhcHRlci5ldmVudEhhbmRsZXIoQSxDKTt9 LDApO31lbHNle0Iub3duZXIuX2V2ZW50SGFuZGxlcihDKTt9fTtZQUhPTy53aWRn ZXQuRmxhc2hBZGFwdGVyLnByb3h5RnVuY3Rpb25Db3VudD0wO1lBSE9PLndpZGdl dC5GbGFzaEFkYXB0ZXIuY3JlYXRlUHJveHlGdW5jdGlvbj1mdW5jdGlvbihCKXt2 YXIgQT1ZQUhPTy53aWRnZXQuRmxhc2hBZGFwdGVyLnByb3h5RnVuY3Rpb25Db3Vu dDtZQUhPTy53aWRnZXQuRmxhc2hBZGFwdGVyWyJwcm94eUZ1bmN0aW9uIitBXT1m dW5jdGlvbigpe3JldHVybiBCLmFwcGx5KG51bGwsYXJndW1lbnRzKTt9O1lBSE9P LndpZGdldC5GbGFzaEFkYXB0ZXIucHJveHlGdW5jdGlvbkNvdW50Kys7cmV0dXJu IllBSE9PLndpZGdldC5GbGFzaEFkYXB0ZXIucHJveHlGdW5jdGlvbiIrQS50b1N0 cmluZygpO307WUFIT08ud2lkZ2V0LkZsYXNoQWRhcHRlci5yZW1vdmVQcm94eUZ1 bmN0aW9uPWZ1bmN0aW9uKEEpe2lmKCFBfHxBLmluZGV4T2YoIllBSE9PLndpZGdl dC5GbGFzaEFkYXB0ZXIucHJveHlGdW5jdGlvbiIpPDApe3JldHVybjt9QT1BLnN1 YnN0cigyNik7WUFIT08ud2lkZ2V0LkZsYXNoQWRhcHRlcltBXT1udWxsO307WUFI T08ud2lkZ2V0LkNoYXJ0PWZ1bmN0aW9uKEMsQSxELEIpe1lBSE9PLndpZGdldC5D aGFydC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxZQUhPTy53aWRn ZXQuQ2hhcnQuU1dGVVJMLEEsQik7dGhpcy5fdHlwZT1DO3RoaXMuX2RhdGFTb3Vy Y2U9RDt0aGlzLmNyZWF0ZUV2ZW50KCJpdGVtTW91c2VPdmVyRXZlbnQiKTt0aGlz LmNyZWF0ZUV2ZW50KCJpdGVtTW91c2VPdXRFdmVudCIpO3RoaXMuY3JlYXRlRXZl bnQoIml0ZW1DbGlja0V2ZW50Iik7dGhpcy5jcmVhdGVFdmVudCgiaXRlbURvdWJs ZUNsaWNrRXZlbnQiKTt0aGlzLmNyZWF0ZUV2ZW50KCJpdGVtRHJhZ1N0YXJ0RXZl bnQiKTt0aGlzLmNyZWF0ZUV2ZW50KCJpdGVtRHJhZ0V2ZW50Iik7dGhpcy5jcmVh dGVFdmVudCgiaXRlbURyYWdFbmRFdmVudCIpO307WUFIT08uZXh0ZW5kKFlBSE9P LndpZGdldC5DaGFydCxZQUhPTy53aWRnZXQuRmxhc2hBZGFwdGVyLHtfdHlwZTpu dWxsLF9wb2xsaW5nSUQ6bnVsbCxfcG9sbGluZ0ludGVydmFsOm51bGwsX2RhdGFU aXBGdW5jdGlvbjpudWxsLF9zZXJpZXNMYWJlbEZ1bmN0aW9uczpudWxsLHRvU3Ry aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIkNoYXJ0ICIrdGhpcy5faWQ7fSxzZXRTdHls ZTpmdW5jdGlvbihBLEIpe0I9WUFIT08ubGFuZy5KU09OLnN0cmluZ2lmeShCKTt0 aGlzLl9zd2Yuc2V0U3R5bGUoQSxCKTt9LHNldFN0eWxlczpmdW5jdGlvbihBKXtB PVlBSE9PLmxhbmcuSlNPTi5zdHJpbmdpZnkoQSk7dGhpcy5fc3dmLnNldFN0eWxl cyhBKTt9LHNldFNlcmllc1N0eWxlczpmdW5jdGlvbihCKXtmb3IodmFyIEE9MDtB PEIubGVuZ3RoO0ErKyl7QltBXT1ZQUhPTy5sYW5nLkpTT04uc3RyaW5naWZ5KEJb QV0pO310aGlzLl9zd2Yuc2V0U2VyaWVzU3R5bGVzKEIpO30sZGVzdHJveTpmdW5j dGlvbigpe2lmKHRoaXMuX2RhdGFTb3VyY2UhPT1udWxsKXtpZih0aGlzLl9wb2xs aW5nSUQhPT1udWxsKXt0aGlzLl9kYXRhU291cmNlLmNsZWFySW50ZXJ2YWwodGhp cy5fcG9sbGluZ0lEKTt0aGlzLl9wb2xsaW5nSUQ9bnVsbDt9fWlmKHRoaXMuX2Rh dGFUaXBGdW5jdGlvbil7WUFIT08ud2lkZ2V0LkZsYXNoQWRhcHRlci5yZW1vdmVQ cm94eUZ1bmN0aW9uKHRoaXMuX2RhdGFUaXBGdW5jdGlvbik7fVlBSE9PLndpZGdl dC5DaGFydC5zdXBlcmNsYXNzLmRlc3Ryb3kuY2FsbCh0aGlzKTt9LF9pbml0QXR0 cmlidXRlczpmdW5jdGlvbihBKXtZQUhPTy53aWRnZXQuQ2hhcnQuc3VwZXJjbGFz cy5faW5pdEF0dHJpYnV0ZXMuY2FsbCh0aGlzLEEpO3RoaXMuZ2V0QXR0cmlidXRl Q29uZmlnKCJyZXF1ZXN0Iix7bWV0aG9kOnRoaXMuX2dldFJlcXVlc3R9KTt0aGlz LnNldEF0dHJpYnV0ZUNvbmZpZygicmVxdWVzdCIse21ldGhvZDp0aGlzLl9zZXRS ZXF1ZXN0fSk7dGhpcy5nZXRBdHRyaWJ1dGVDb25maWcoImRhdGFTb3VyY2UiLHtt ZXRob2Q6dGhpcy5fZ2V0RGF0YVNvdXJjZX0pO3RoaXMuc2V0QXR0cmlidXRlQ29u ZmlnKCJkYXRhU291cmNlIix7bWV0aG9kOnRoaXMuX3NldERhdGFTb3VyY2V9KTt0 aGlzLmdldEF0dHJpYnV0ZUNvbmZpZygic2VyaWVzIix7bWV0aG9kOnRoaXMuX2dl dFNlcmllc0RlZnN9KTt0aGlzLnNldEF0dHJpYnV0ZUNvbmZpZygic2VyaWVzIix7 bWV0aG9kOnRoaXMuX3NldFNlcmllc0RlZnN9KTt0aGlzLmdldEF0dHJpYnV0ZUNv bmZpZygiY2F0ZWdvcnlOYW1lcyIse21ldGhvZDp0aGlzLl9nZXRDYXRlZ29yeU5h bWVzfSk7dGhpcy5zZXRBdHRyaWJ1dGVDb25maWcoImNhdGVnb3J5TmFtZXMiLHt2 YWxpZGF0b3I6WUFIT08ubGFuZy5pc0FycmF5LG1ldGhvZDp0aGlzLl9zZXRDYXRl Z29yeU5hbWVzfSk7dGhpcy5nZXRBdHRyaWJ1dGVDb25maWcoImRhdGFUaXBGdW5j dGlvbiIse21ldGhvZDp0aGlzLl9nZXREYXRhVGlwRnVuY3Rpb259KTt0aGlzLnNl dEF0dHJpYnV0ZUNvbmZpZygiZGF0YVRpcEZ1bmN0aW9uIix7bWV0aG9kOnRoaXMu X3NldERhdGFUaXBGdW5jdGlvbn0pO3RoaXMuZ2V0QXR0cmlidXRlQ29uZmlnKCJw b2xsaW5nIix7bWV0aG9kOnRoaXMuX2dldFBvbGxpbmd9KTt0aGlzLnNldEF0dHJp YnV0ZUNvbmZpZygicG9sbGluZyIse21ldGhvZDp0aGlzLl9zZXRQb2xsaW5nfSk7 fSxfbG9hZEhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9zd2Yuc2V0VHlwZSh0aGlz Ll90eXBlKTtpZih0aGlzLl9hdHRyaWJ1dGVzLnN0eWxlKXt2YXIgQT10aGlzLl9h dHRyaWJ1dGVzLnN0eWxlO3RoaXMuc2V0U3R5bGVzKEEpO31ZQUhPTy53aWRnZXQu Q2hhcnQuc3VwZXJjbGFzcy5fbG9hZEhhbmRsZXIuY2FsbCh0aGlzKTtpZih0aGlz Ll9kYXRhU291cmNlKXt0aGlzLnNldCgiZGF0YVNvdXJjZSIsdGhpcy5fZGF0YVNv dXJjZSk7fX0scmVmcmVzaERhdGE6ZnVuY3Rpb24oKXtpZighdGhpcy5faW5pdGlh bGl6ZWQpe3JldHVybjt9aWYodGhpcy5fZGF0YVNvdXJjZSE9PW51bGwpe2lmKHRo aXMuX3BvbGxpbmdJRCE9PW51bGwpe3RoaXMuX2RhdGFTb3VyY2UuY2xlYXJJbnRl cnZhbCh0aGlzLl9wb2xsaW5nSUQpO3RoaXMuX3BvbGxpbmdJRD1udWxsO31pZih0 aGlzLl9wb2xsaW5nSW50ZXJ2YWw+MCl7dGhpcy5fcG9sbGluZ0lEPXRoaXMuX2Rh dGFTb3VyY2Uuc2V0SW50ZXJ2YWwodGhpcy5fcG9sbGluZ0ludGVydmFsLHRoaXMu X3JlcXVlc3QsdGhpcy5fbG9hZERhdGFIYW5kbGVyLHRoaXMpO310aGlzLl9kYXRh U291cmNlLnNlbmRSZXF1ZXN0KHRoaXMuX3JlcXVlc3QsdGhpcy5fbG9hZERhdGFI YW5kbGVyLHRoaXMpO319LF9sb2FkRGF0YUhhbmRsZXI6ZnVuY3Rpb24oRCxDLEop e2lmKHRoaXMuX3N3Zil7aWYoSil7fWVsc2V7dmFyIEg7aWYodGhpcy5fc2VyaWVz TGFiZWxGdW5jdGlvbnMpe3ZhciBJPXRoaXMuX3Nlcmllc0xhYmVsRnVuY3Rpb25z Lmxlbmd0aDtmb3IoSD0wO0g8STtIKyspe1lBSE9PLndpZGdldC5GbGFzaEFkYXB0 ZXIucmVtb3ZlUHJveHlGdW5jdGlvbih0aGlzLl9zZXJpZXNMYWJlbEZ1bmN0aW9u c1tIXSk7fXRoaXMuX3Nlcmllc0xhYmVsRnVuY3Rpb249bnVsbDt9dGhpcy5fc2Vy aWVzTGFiZWxGdW5jdGlvbnM9W107dmFyIEY9W107dmFyIEU9MDt2YXIgSz1udWxs O2lmKHRoaXMuX3Nlcmllc0RlZnMhPT1udWxsKXtFPXRoaXMuX3Nlcmllc0RlZnMu bGVuZ3RoO2ZvcihIPTA7SDxFO0grKyl7Sz10aGlzLl9zZXJpZXNEZWZzW0hdO3Zh ciBCPXt9O2Zvcih2YXIgQSBpbiBLKXtpZihZQUhPTy5sYW5nLmhhc093blByb3Bl cnR5KEssQSkpe2lmKEE9PSJzdHlsZSIpe2lmKEsuc3R5bGUhPT1udWxsKXtCLnN0 eWxlPVlBSE9PLmxhbmcuSlNPTi5zdHJpbmdpZnkoSy5zdHlsZSk7fX1lbHNle2lm KEE9PSJsYWJlbEZ1bmN0aW9uIil7aWYoSy5sYWJlbEZ1bmN0aW9uIT09bnVsbCYm dHlwZW9mIEsubGFiZWxGdW5jdGlvbj09ImZ1bmN0aW9uIil7Qi5sYWJlbEZ1bmN0 aW9uPVlBSE9PLndpZGdldC5GbGFzaEFkYXB0ZXIuY3JlYXRlUHJveHlGdW5jdGlv bihLLmxhYmVsRnVuY3Rpb24pO3RoaXMuX3Nlcmllc0xhYmVsRnVuY3Rpb25zLnB1 c2goQi5sYWJlbEZ1bmN0aW9uKTt9fWVsc2V7QltBXT1LW0FdO319fX1GLnB1c2go Qik7fX1pZihFPjApe2ZvcihIPTA7SDxFO0grKyl7Sz1GW0hdO2lmKCFLLnR5cGUp e0sudHlwZT10aGlzLl90eXBlO31LLmRhdGFQcm92aWRlcj1DLnJlc3VsdHM7fX1l bHNle3ZhciBHPXt0eXBlOnRoaXMuX3R5cGUsZGF0YVByb3ZpZGVyOkMucmVzdWx0 c307Ri5wdXNoKEcpO310aGlzLl9zd2Yuc2V0RGF0YVByb3ZpZGVyKEYpO319fSxf cmVxdWVzdDoiIixfZ2V0UmVxdWVzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9y ZXF1ZXN0O30sX3NldFJlcXVlc3Q6ZnVuY3Rpb24oQSl7dGhpcy5fcmVxdWVzdD1B O3RoaXMucmVmcmVzaERhdGEoKTt9LF9kYXRhU291cmNlOm51bGwsX2dldERhdGFT b3VyY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTt9LF9zZXRE YXRhU291cmNlOmZ1bmN0aW9uKEEpe3RoaXMuX2RhdGFTb3VyY2U9QTt0aGlzLnJl ZnJlc2hEYXRhKCk7fSxfc2VyaWVzRGVmczpudWxsLF9nZXRTZXJpZXNEZWZzOmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nlcmllc0RlZnM7fSxfc2V0U2VyaWVzRGVm czpmdW5jdGlvbihBKXt0aGlzLl9zZXJpZXNEZWZzPUE7dGhpcy5yZWZyZXNoRGF0 YSgpO30sX2dldENhdGVnb3J5TmFtZXM6ZnVuY3Rpb24oKXt0aGlzLl9zd2YuZ2V0 Q2F0ZWdvcnlOYW1lcygpO30sX3NldENhdGVnb3J5TmFtZXM6ZnVuY3Rpb24oQSl7 dGhpcy5fc3dmLnNldENhdGVnb3J5TmFtZXMoQSk7fSxfc2V0RGF0YVRpcEZ1bmN0 aW9uOmZ1bmN0aW9uKEEpe2lmKHRoaXMuX2RhdGFUaXBGdW5jdGlvbil7WUFIT08u d2lkZ2V0LkZsYXNoQWRhcHRlci5yZW1vdmVQcm94eUZ1bmN0aW9uKHRoaXMuX2Rh dGFUaXBGdW5jdGlvbik7fWlmKEEmJnR5cGVvZiBBPT0iZnVuY3Rpb24iKXtBPVlB SE9PLndpZGdldC5GbGFzaEFkYXB0ZXIuY3JlYXRlUHJveHlGdW5jdGlvbihBKTt0 aGlzLl9kYXRhVGlwRnVuY3Rpb249QTt9dGhpcy5fc3dmLnNldERhdGFUaXBGdW5j dGlvbihBKTt9LF9nZXRQb2xsaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bv bGxpbmdJbnRlcnZhbDt9LF9zZXRQb2xsaW5nOmZ1bmN0aW9uKEEpe3RoaXMuX3Bv bGxpbmdJbnRlcnZhbD1BO3RoaXMucmVmcmVzaERhdGEoKTt9fSk7WUFIT08ud2lk Z2V0LkNoYXJ0LlNXRlVSTD0iYXNzZXRzL2NoYXJ0cy5zd2YiO1lBSE9PLndpZGdl dC5QaWVDaGFydD1mdW5jdGlvbihBLEMsQil7WUFIT08ud2lkZ2V0LlBpZUNoYXJ0 LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCJwaWUiLEEsQyxCKTt9 O1lBSE9PLmxhbmcuZXh0ZW5kKFlBSE9PLndpZGdldC5QaWVDaGFydCxZQUhPTy53 aWRnZXQuQ2hhcnQse19pbml0QXR0cmlidXRlczpmdW5jdGlvbihBKXtZQUhPTy53 aWRnZXQuUGllQ2hhcnQuc3VwZXJjbGFzcy5faW5pdEF0dHJpYnV0ZXMuY2FsbCh0 aGlzLEEpO3RoaXMuZ2V0QXR0cmlidXRlQ29uZmlnKCJkYXRhRmllbGQiLHttZXRo b2Q6dGhpcy5fZ2V0RGF0YUZpZWxkfSk7dGhpcy5zZXRBdHRyaWJ1dGVDb25maWco ImRhdGFGaWVsZCIse3ZhbGlkYXRvcjpZQUhPTy5sYW5nLmlzU3RyaW5nLG1ldGhv ZDp0aGlzLl9zZXREYXRhRmllbGR9KTt0aGlzLmdldEF0dHJpYnV0ZUNvbmZpZygi Y2F0ZWdvcnlGaWVsZCIse21ldGhvZDp0aGlzLl9nZXRDYXRlZ29yeUZpZWxkfSk7 dGhpcy5zZXRBdHRyaWJ1dGVDb25maWcoImNhdGVnb3J5RmllbGQiLHt2YWxpZGF0 b3I6WUFIT08ubGFuZy5pc1N0cmluZyxtZXRob2Q6dGhpcy5fc2V0Q2F0ZWdvcnlG aWVsZH0pO30sX2dldERhdGFGaWVsZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9z d2YuZ2V0RGF0YUZpZWxkKCk7fSxfc2V0RGF0YUZpZWxkOmZ1bmN0aW9uKEEpe3Ro aXMuX3N3Zi5zZXREYXRhRmllbGQoQSk7fSxfZ2V0Q2F0ZWdvcnlGaWVsZDpmdW5j dGlvbigpe3JldHVybiB0aGlzLl9zd2YuZ2V0Q2F0ZWdvcnlGaWVsZCgpO30sX3Nl dENhdGVnb3J5RmllbGQ6ZnVuY3Rpb24oQSl7dGhpcy5fc3dmLnNldENhdGVnb3J5 RmllbGQoQSk7fX0pO1lBSE9PLndpZGdldC5DYXJ0ZXNpYW5DaGFydD1mdW5jdGlv bihDLEEsRCxCKXtZQUhPTy53aWRnZXQuQ2FydGVzaWFuQ2hhcnQuc3VwZXJjbGFz cy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsQyxBLEQsQik7fTtZQUhPTy5sYW5nLmV4 dGVuZChZQUhPTy53aWRnZXQuQ2FydGVzaWFuQ2hhcnQsWUFIT08ud2lkZ2V0LkNo YXJ0LHtfeEF4aXNMYWJlbEZ1bmN0aW9uOm51bGwsX3lBeGlzTGFiZWxGdW5jdGlv bjpudWxsLGRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLl94QXhpc0xhYmVsRnVu Y3Rpb24pe1lBSE9PLndpZGdldC5GbGFzaEFkYXB0ZXIucmVtb3ZlUHJveHlGdW5j dGlvbih0aGlzLl94QXhpc0xhYmVsRnVuY3Rpb24pO3RoaXMuX3hBeGlzTGFiZWxG dW5jdGlvbj1udWxsO31pZih0aGlzLl95QXhpc0xhYmVsRnVuY3Rpb24pe1lBSE9P LndpZGdldC5GbGFzaEFkYXB0ZXIucmVtb3ZlUHJveHlGdW5jdGlvbih0aGlzLl95 QXhpc0xhYmVsRnVuY3Rpb24pO3RoaXMuX3lBeGlzTGFiZWxGdW5jdGlvbj1udWxs O31ZQUhPTy53aWRnZXQuQ2FydGVzaWFuQ2hhcnQuc3VwZXJjbGFzcy5kZXN0cm95 LmNhbGwodGhpcyk7fSxfaW5pdEF0dHJpYnV0ZXM6ZnVuY3Rpb24oQSl7WUFIT08u d2lkZ2V0LkNhcnRlc2lhbkNoYXJ0LnN1cGVyY2xhc3MuX2luaXRBdHRyaWJ1dGVz LmNhbGwodGhpcyxBKTt0aGlzLmdldEF0dHJpYnV0ZUNvbmZpZygieEZpZWxkIix7 bWV0aG9kOnRoaXMuX2dldFhGaWVsZH0pO3RoaXMuc2V0QXR0cmlidXRlQ29uZmln KCJ4RmllbGQiLHt2YWxpZGF0b3I6WUFIT08ubGFuZy5pc1N0cmluZyxtZXRob2Q6 dGhpcy5fc2V0WEZpZWxkfSk7dGhpcy5nZXRBdHRyaWJ1dGVDb25maWcoInlGaWVs ZCIse21ldGhvZDp0aGlzLl9nZXRZRmllbGR9KTt0aGlzLnNldEF0dHJpYnV0ZUNv bmZpZygieUZpZWxkIix7dmFsaWRhdG9yOllBSE9PLmxhbmcuaXNTdHJpbmcsbWV0 aG9kOnRoaXMuX3NldFlGaWVsZH0pO3RoaXMuc2V0QXR0cmlidXRlQ29uZmlnKCJ4 QXhpcyIse21ldGhvZDp0aGlzLl9zZXRYQXhpc30pO3RoaXMuc2V0QXR0cmlidXRl Q29uZmlnKCJ5QXhpcyIse21ldGhvZDp0aGlzLl9zZXRZQXhpc30pO30sX2dldFhG aWVsZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zd2YuZ2V0SG9yaXpvbnRhbEZp ZWxkKCk7fSxfc2V0WEZpZWxkOmZ1bmN0aW9uKEEpe3RoaXMuX3N3Zi5zZXRIb3Jp em9udGFsRmllbGQoQSk7fSxfZ2V0WUZpZWxkOmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMuX3N3Zi5nZXRWZXJ0aWNhbEZpZWxkKCk7fSxfc2V0WUZpZWxkOmZ1bmN0aW9u KEEpe3RoaXMuX3N3Zi5zZXRWZXJ0aWNhbEZpZWxkKEEpO30sX3NldFhBeGlzOmZ1 bmN0aW9uKEIpe2lmKHRoaXMuX3hBeGlzTGFiZWxGdW5jdGlvbiE9PW51bGwpe1lB SE9PLndpZGdldC5GbGFzaEFkYXB0ZXIucmVtb3ZlUHJveHlGdW5jdGlvbih0aGlz Ll94QXhpc0xhYmVsRnVuY3Rpb24pO3RoaXMuX3hBeGlzTGFiZWxGdW5jdGlvbj1u dWxsO312YXIgQT17fTtmb3IodmFyIEMgaW4gQil7aWYoQz09ImxhYmVsRnVuY3Rp b24iKXtpZihCLmxhYmVsRnVuY3Rpb24hPT1udWxsKXtpZih0eXBlb2YgQi5sYWJl bEZ1bmN0aW9uPT0iZnVuY3Rpb24iKXtBLmxhYmVsRnVuY3Rpb249WUFIT08ud2lk Z2V0LkZsYXNoQWRhcHRlci5jcmVhdGVQcm94eUZ1bmN0aW9uKEIubGFiZWxGdW5j dGlvbik7fWVsc2V7QS5sYWJlbEZ1bmN0aW9uPUIubGFiZWxGdW5jdGlvbjt9dGhp cy5feEF4aXNMYWJlbEZ1bmN0aW9uPUEubGFiZWxGdW5jdGlvbjt9fWVsc2V7QVtD XT1CW0NdO319dGhpcy5fc3dmLnNldEhvcml6b250YWxBeGlzKEEpO30sX3NldFlB eGlzOmZ1bmN0aW9uKEIpe2lmKHRoaXMuX3lBeGlzTGFiZWxGdW5jdGlvbiE9PW51 bGwpe1lBSE9PLndpZGdldC5GbGFzaEFkYXB0ZXIucmVtb3ZlUHJveHlGdW5jdGlv bih0aGlzLl95QXhpc0xhYmVsRnVuY3Rpb24pO3RoaXMuX3lBeGlzTGFiZWxGdW5j dGlvbj1udWxsO312YXIgQT17fTtmb3IodmFyIEMgaW4gQil7aWYoQz09ImxhYmVs RnVuY3Rpb24iKXtpZihCLmxhYmVsRnVuY3Rpb24hPT1udWxsKXtpZih0eXBlb2Yg Qi5sYWJlbEZ1bmN0aW9uPT0iZnVuY3Rpb24iKXtBLmxhYmVsRnVuY3Rpb249WUFI T08ud2lkZ2V0LkZsYXNoQWRhcHRlci5jcmVhdGVQcm94eUZ1bmN0aW9uKEIubGFi ZWxGdW5jdGlvbik7fWVsc2V7QS5sYWJlbEZ1bmN0aW9uPUIubGFiZWxGdW5jdGlv bjt9dGhpcy5feUF4aXNMYWJlbEZ1bmN0aW9uPUEubGFiZWxGdW5jdGlvbjt9fWVs c2V7QVtDXT1CW0NdO319dGhpcy5fc3dmLnNldFZlcnRpY2FsQXhpcyhBKTt9fSk7 WUFIT08ud2lkZ2V0LkxpbmVDaGFydD1mdW5jdGlvbihBLEMsQil7WUFIT08ud2lk Z2V0LkxpbmVDaGFydC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcywi bGluZSIsQSxDLEIpO307WUFIT08ubGFuZy5leHRlbmQoWUFIT08ud2lkZ2V0Lkxp bmVDaGFydCxZQUhPTy53aWRnZXQuQ2FydGVzaWFuQ2hhcnQpO1lBSE9PLndpZGdl dC5Db2x1bW5DaGFydD1mdW5jdGlvbihBLEMsQil7WUFIT08ud2lkZ2V0LkNvbHVt bkNoYXJ0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCJjb2x1bW4i LEEsQyxCKTt9O1lBSE9PLmxhbmcuZXh0ZW5kKFlBSE9PLndpZGdldC5Db2x1bW5D aGFydCxZQUhPTy53aWRnZXQuQ2FydGVzaWFuQ2hhcnQpO1lBSE9PLndpZGdldC5C YXJDaGFydD1mdW5jdGlvbihBLEMsQil7WUFIT08ud2lkZ2V0LkJhckNoYXJ0LnN1 cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLCJiYXIiLEEsQyxCKTt9O1lB SE9PLmxhbmcuZXh0ZW5kKFlBSE9PLndpZGdldC5CYXJDaGFydCxZQUhPTy53aWRn ZXQuQ2FydGVzaWFuQ2hhcnQpO1lBSE9PLndpZGdldC5TdGFja2VkQ29sdW1uQ2hh cnQ9ZnVuY3Rpb24oQSxDLEIpe1lBSE9PLndpZGdldC5TdGFja2VkQ29sdW1uQ2hh cnQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsInN0YWNrY29sdW1u IixBLEMsQik7fTtZQUhPTy5sYW5nLmV4dGVuZChZQUhPTy53aWRnZXQuU3RhY2tl ZENvbHVtbkNoYXJ0LFlBSE9PLndpZGdldC5DYXJ0ZXNpYW5DaGFydCk7WUFIT08u d2lkZ2V0LlN0YWNrZWRCYXJDaGFydD1mdW5jdGlvbihBLEMsQil7WUFIT08ud2lk Z2V0LlN0YWNrZWRCYXJDaGFydC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwo dGhpcywic3RhY2tiYXIiLEEsQyxCKTt9O1lBSE9PLmxhbmcuZXh0ZW5kKFlBSE9P LndpZGdldC5TdGFja2VkQmFyQ2hhcnQsWUFIT08ud2lkZ2V0LkNhcnRlc2lhbkNo YXJ0KTtZQUhPTy53aWRnZXQuQXhpcz1mdW5jdGlvbigpe307WUFIT08ud2lkZ2V0 LkF4aXMucHJvdG90eXBlPXt0eXBlOm51bGwscmV2ZXJzZTpmYWxzZSxsYWJlbEZ1 bmN0aW9uOm51bGwsbGFiZWxTcGFjaW5nOjIsdGl0bGU6bnVsbH07WUFIT08ud2lk Z2V0Lk51bWVyaWNBeGlzPWZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0Lk51bWVyaWNB eGlzLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt9O1lBSE9PLmxh bmcuZXh0ZW5kKFlBSE9PLndpZGdldC5OdW1lcmljQXhpcyxZQUhPTy53aWRnZXQu QXhpcyx7dHlwZToibnVtZXJpYyIsbWluaW11bTpOYU4sbWF4aW11bTpOYU4sbWFq b3JVbml0Ok5hTixtaW5vclVuaXQ6TmFOLHNuYXBUb1VuaXRzOnRydWUsc3RhY2tp bmdFbmFibGVkOmZhbHNlLGFsd2F5c1Nob3daZXJvOnRydWUsc2NhbGU6ImxpbmVh ciIscm91bmRNYWpvclVuaXQ6dHJ1ZX0pO1lBSE9PLndpZGdldC5UaW1lQXhpcz1m dW5jdGlvbigpe1lBSE9PLndpZGdldC5UaW1lQXhpcy5zdXBlcmNsYXNzLmNvbnN0 cnVjdG9yLmNhbGwodGhpcyk7fTtZQUhPTy5sYW5nLmV4dGVuZChZQUhPTy53aWRn ZXQuVGltZUF4aXMsWUFIT08ud2lkZ2V0LkF4aXMse3R5cGU6InRpbWUiLG1pbmlt dW06bnVsbCxtYXhpbXVtOm51bGwsbWFqb3JVbml0Ok5hTixtYWpvclRpbWVVbml0 Om51bGwsbWlub3JVbml0Ok5hTixtaW5vclRpbWVVbml0Om51bGwsc25hcFRvVW5p dHM6dHJ1ZSxzdGFja2luZ0VuYWJsZWQ6ZmFsc2V9KTtZQUhPTy53aWRnZXQuQ2F0 ZWdvcnlBeGlzPWZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LkNhdGVnb3J5QXhpcy5z dXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7fTtZQUhPTy5sYW5nLmV4 dGVuZChZQUhPTy53aWRnZXQuQ2F0ZWdvcnlBeGlzLFlBSE9PLndpZGdldC5BeGlz LHt0eXBlOiJjYXRlZ29yeSIsY2F0ZWdvcnlOYW1lczpudWxsLGNhbGN1bGF0ZUNh dGVnb3J5Q291bnQ6ZmFsc2V9KTtZQUhPTy53aWRnZXQuU2VyaWVzPWZ1bmN0aW9u KCl7fTtZQUhPTy53aWRnZXQuU2VyaWVzLnByb3RvdHlwZT17dHlwZTpudWxsLGRp c3BsYXlOYW1lOm51bGx9O1lBSE9PLndpZGdldC5DYXJ0ZXNpYW5TZXJpZXM9ZnVu Y3Rpb24oKXtZQUhPTy53aWRnZXQuQ2FydGVzaWFuU2VyaWVzLnN1cGVyY2xhc3Mu Y29uc3RydWN0b3IuY2FsbCh0aGlzKTt9O1lBSE9PLmxhbmcuZXh0ZW5kKFlBSE9P LndpZGdldC5DYXJ0ZXNpYW5TZXJpZXMsWUFIT08ud2lkZ2V0LlNlcmllcyx7eEZp ZWxkOm51bGwseUZpZWxkOm51bGx9KTtZQUhPTy53aWRnZXQuQ29sdW1uU2VyaWVz PWZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LkNvbHVtblNlcmllcy5zdXBlcmNsYXNz LmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7fTtZQUhPTy5sYW5nLmV4dGVuZChZQUhP Ty53aWRnZXQuQ29sdW1uU2VyaWVzLFlBSE9PLndpZGdldC5DYXJ0ZXNpYW5TZXJp ZXMse3R5cGU6ImNvbHVtbiJ9KTtZQUhPTy53aWRnZXQuTGluZVNlcmllcz1mdW5j dGlvbigpe1lBSE9PLndpZGdldC5MaW5lU2VyaWVzLnN1cGVyY2xhc3MuY29uc3Ry dWN0b3IuY2FsbCh0aGlzKTt9O1lBSE9PLmxhbmcuZXh0ZW5kKFlBSE9PLndpZGdl dC5MaW5lU2VyaWVzLFlBSE9PLndpZGdldC5DYXJ0ZXNpYW5TZXJpZXMse3R5cGU6 ImxpbmUifSk7WUFIT08ud2lkZ2V0LkJhclNlcmllcz1mdW5jdGlvbigpe1lBSE9P LndpZGdldC5CYXJTZXJpZXMuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRo aXMpO307WUFIT08ubGFuZy5leHRlbmQoWUFIT08ud2lkZ2V0LkJhclNlcmllcyxZ QUhPTy53aWRnZXQuQ2FydGVzaWFuU2VyaWVzLHt0eXBlOiJiYXIifSk7WUFIT08u d2lkZ2V0LlBpZVNlcmllcz1mdW5jdGlvbigpe1lBSE9PLndpZGdldC5QaWVTZXJp ZXMuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO307WUFIT08ubGFu Zy5leHRlbmQoWUFIT08ud2lkZ2V0LlBpZVNlcmllcyxZQUhPTy53aWRnZXQuU2Vy aWVzLHt0eXBlOiJwaWUiLGRhdGFGaWVsZDpudWxsLGNhdGVnb3J5RmllbGQ6bnVs bCxsYWJlbEZ1bmN0aW9uOm51bGx9KTtZQUhPTy53aWRnZXQuU3RhY2tlZEJhclNl cmllcz1mdW5jdGlvbigpe1lBSE9PLndpZGdldC5TdGFja2VkQmFyU2VyaWVzLnN1 cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt9O1lBSE9PLmxhbmcuZXh0 ZW5kKFlBSE9PLndpZGdldC5TdGFja2VkQmFyU2VyaWVzLFlBSE9PLndpZGdldC5D YXJ0ZXNpYW5TZXJpZXMse3R5cGU6InN0YWNrYmFyIn0pO1lBSE9PLndpZGdldC5T dGFja2VkQ29sdW1uU2VyaWVzPWZ1bmN0aW9uKCl7WUFIT08ud2lkZ2V0LlN0YWNr ZWRDb2x1bW5TZXJpZXMuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMp O307WUFIT08ubGFuZy5leHRlbmQoWUFIT08ud2lkZ2V0LlN0YWNrZWRDb2x1bW5T ZXJpZXMsWUFIT08ud2lkZ2V0LkNhcnRlc2lhblNlcmllcyx7dHlwZToic3RhY2tj b2x1bW4ifSk7WUFIT08ucmVnaXN0ZXIoImNoYXJ0cyIsWUFIT08ud2lkZ2V0LkNo YXJ0LHt2ZXJzaW9uOiIyLjcuMCIsYnVpbGQ6IjE3OTkifSk7WUFIT08ubmFtZXNw YWNlKCJ1dGlsIik7WUFIT08udXRpbC5Db29raWU9e19jcmVhdGVDb29raWVTdHJp bmc6ZnVuY3Rpb24oQixELEMsQSl7dmFyIEY9WUFIT08ubGFuZzt2YXIgRT1lbmNv ZGVVUklDb21wb25lbnQoQikrIj0iKyhDP2VuY29kZVVSSUNvbXBvbmVudChEKTpE KTtpZihGLmlzT2JqZWN0KEEpKXtpZihBLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRl KXtFKz0iOyBleHBpcmVzPSIrQS5leHBpcmVzLnRvR01UU3RyaW5nKCk7fWlmKEYu aXNTdHJpbmcoQS5wYXRoKSYmQS5wYXRoIT0iIil7RSs9IjsgcGF0aD0iK0EucGF0 aDt9aWYoRi5pc1N0cmluZyhBLmRvbWFpbikmJkEuZG9tYWluIT0iIil7RSs9Ijsg ZG9tYWluPSIrQS5kb21haW47fWlmKEEuc2VjdXJlPT09dHJ1ZSl7RSs9Ijsgc2Vj dXJlIjt9fXJldHVybiBFO30sX2NyZWF0ZUNvb2tpZUhhc2hTdHJpbmc6ZnVuY3Rp b24oQil7dmFyIEQ9WUFIT08ubGFuZztpZighRC5pc09iamVjdChCKSl7dGhyb3cg bmV3IFR5cGVFcnJvcigiQ29va2llLl9jcmVhdGVDb29raWVIYXNoU3RyaW5nKCk6 IEFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LiIpO312YXIgQz1uZXcgQXJyYXko KTtmb3IodmFyIEEgaW4gQil7aWYoRC5oYXNPd25Qcm9wZXJ0eShCLEEpJiYhRC5p c0Z1bmN0aW9uKEJbQV0pJiYhRC5pc1VuZGVmaW5lZChCW0FdKSl7Qy5wdXNoKGVu Y29kZVVSSUNvbXBvbmVudChBKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KFN0cmlu ZyhCW0FdKSkpO319cmV0dXJuIEMuam9pbigiJiIpO30sX3BhcnNlQ29va2llSGFz aDpmdW5jdGlvbihFKXt2YXIgRD1FLnNwbGl0KCImIiksRj1udWxsLEM9bmV3IE9i amVjdCgpO2lmKEUubGVuZ3RoPjApe2Zvcih2YXIgQj0wLEE9RC5sZW5ndGg7QjxB O0IrKyl7Rj1EW0JdLnNwbGl0KCI9Iik7Q1tkZWNvZGVVUklDb21wb25lbnQoRlsw XSldPWRlY29kZVVSSUNvbXBvbmVudChGWzFdKTt9fXJldHVybiBDO30sX3BhcnNl Q29va2llU3RyaW5nOmZ1bmN0aW9uKEosQSl7dmFyIEs9bmV3IE9iamVjdCgpO2lm KFlBSE9PLmxhbmcuaXNTdHJpbmcoSikmJkoubGVuZ3RoPjApe3ZhciBCPShBPT09 ZmFsc2U/ZnVuY3Rpb24oTCl7cmV0dXJuIEw7fTpkZWNvZGVVUklDb21wb25lbnQp O2lmKC9bXj1dKz1bXj07XT8oPzo7IFtePV0rPVtePV0/KT8vLnRlc3QoSikpe3Zh ciBIPUouc3BsaXQoLztccy9nKSxJPW51bGwsQz1udWxsLEU9bnVsbDtmb3IodmFy IEQ9MCxGPUgubGVuZ3RoO0Q8RjtEKyspe0U9SFtEXS5tYXRjaCgvKFtePV0rKT0v aSk7aWYoRSBpbnN0YW5jZW9mIEFycmF5KXt0cnl7ST1kZWNvZGVVUklDb21wb25l bnQoRVsxXSk7Qz1CKEhbRF0uc3Vic3RyaW5nKEVbMV0ubGVuZ3RoKzEpKTt9Y2F0 Y2goRyl7fX1lbHNle0k9ZGVjb2RlVVJJQ29tcG9uZW50KEhbRF0pO0M9STt9S1tJ XT1DO319fXJldHVybiBLO30sZ2V0OmZ1bmN0aW9uKEEsQil7dmFyIEQ9WUFIT08u bGFuZzt2YXIgQz10aGlzLl9wYXJzZUNvb2tpZVN0cmluZyhkb2N1bWVudC5jb29r aWUpO2lmKCFELmlzU3RyaW5nKEEpfHxBPT09IiIpe3Rocm93IG5ldyBUeXBlRXJy b3IoIkNvb2tpZS5nZXQoKTogQ29va2llIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0 eSBzdHJpbmcuIik7fWlmKEQuaXNVbmRlZmluZWQoQ1tBXSkpe3JldHVybiBudWxs O31pZighRC5pc0Z1bmN0aW9uKEIpKXtyZXR1cm4gQ1tBXTt9ZWxzZXtyZXR1cm4g QihDW0FdKTt9fSxnZXRTdWI6ZnVuY3Rpb24oQSxDLEIpe3ZhciBFPVlBSE9PLmxh bmc7dmFyIEQ9dGhpcy5nZXRTdWJzKEEpO2lmKEQhPT1udWxsKXtpZighRS5pc1N0 cmluZyhDKXx8Qz09PSIiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJDb29raWUuZ2V0 U3ViKCk6IFN1YmNvb2tpZSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5n LiIpO31pZihFLmlzVW5kZWZpbmVkKERbQ10pKXtyZXR1cm4gbnVsbDt9aWYoIUUu aXNGdW5jdGlvbihCKSl7cmV0dXJuIERbQ107fWVsc2V7cmV0dXJuIEIoRFtDXSk7 fX1lbHNle3JldHVybiBudWxsO319LGdldFN1YnM6ZnVuY3Rpb24oQSl7aWYoIVlB SE9PLmxhbmcuaXNTdHJpbmcoQSl8fEE9PT0iIil7dGhyb3cgbmV3IFR5cGVFcnJv cigiQ29va2llLmdldFN1YnMoKTogQ29va2llIG5hbWUgbXVzdCBiZSBhIG5vbi1l bXB0eSBzdHJpbmcuIik7fXZhciBCPXRoaXMuX3BhcnNlQ29va2llU3RyaW5nKGRv Y3VtZW50LmNvb2tpZSxmYWxzZSk7aWYoWUFIT08ubGFuZy5pc1N0cmluZyhCW0Fd KSl7cmV0dXJuIHRoaXMuX3BhcnNlQ29va2llSGFzaChCW0FdKTt9cmV0dXJuIG51 bGw7fSxyZW1vdmU6ZnVuY3Rpb24oQixBKXtpZighWUFIT08ubGFuZy5pc1N0cmlu ZyhCKXx8Qj09PSIiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJDb29raWUucmVtb3Zl KCk6IENvb2tpZSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLiIpO31B PUF8fHt9O0EuZXhwaXJlcz1uZXcgRGF0ZSgwKTtyZXR1cm4gdGhpcy5zZXQoQiwi IixBKTt9LHJlbW92ZVN1YjpmdW5jdGlvbihCLEQsQSl7aWYoIVlBSE9PLmxhbmcu aXNTdHJpbmcoQil8fEI9PT0iIil7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29va2ll LnJlbW92ZVN1YigpOiBDb29raWUgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0 cmluZy4iKTt9aWYoIVlBSE9PLmxhbmcuaXNTdHJpbmcoRCl8fEQ9PT0iIil7dGhy b3cgbmV3IFR5cGVFcnJvcigiQ29va2llLnJlbW92ZVN1YigpOiBTdWJjb29raWUg bmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4iKTt9dmFyIEM9dGhpcy5n ZXRTdWJzKEIpO2lmKFlBSE9PLmxhbmcuaXNPYmplY3QoQykmJllBSE9PLmxhbmcu aGFzT3duUHJvcGVydHkoQyxEKSl7ZGVsZXRlIENbRF07cmV0dXJuIHRoaXMuc2V0 U3VicyhCLEMsQSk7fWVsc2V7cmV0dXJuIiI7fX0sc2V0OmZ1bmN0aW9uKEIsQyxB KXt2YXIgRT1ZQUhPTy5sYW5nO2lmKCFFLmlzU3RyaW5nKEIpKXt0aHJvdyBuZXcg VHlwZUVycm9yKCJDb29raWUuc2V0KCk6IENvb2tpZSBuYW1lIG11c3QgYmUgYSBz dHJpbmcuIik7fWlmKEUuaXNVbmRlZmluZWQoQykpe3Rocm93IG5ldyBUeXBlRXJy b3IoIkNvb2tpZS5zZXQoKTogVmFsdWUgY2Fubm90IGJlIHVuZGVmaW5lZC4iKTt9 dmFyIEQ9dGhpcy5fY3JlYXRlQ29va2llU3RyaW5nKEIsQyx0cnVlLEEpO2RvY3Vt ZW50LmNvb2tpZT1EO3JldHVybiBEO30sc2V0U3ViOmZ1bmN0aW9uKEIsRCxDLEEp e3ZhciBGPVlBSE9PLmxhbmc7aWYoIUYuaXNTdHJpbmcoQil8fEI9PT0iIil7dGhy b3cgbmV3IFR5cGVFcnJvcigiQ29va2llLnNldFN1YigpOiBDb29raWUgbmFtZSBt dXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4iKTt9aWYoIUYuaXNTdHJpbmcoRCl8 fEQ9PT0iIil7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29va2llLnNldFN1YigpOiBT dWJjb29raWUgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4iKTt9aWYo Ri5pc1VuZGVmaW5lZChDKSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29va2llLnNl dFN1YigpOiBTdWJjb29raWUgdmFsdWUgY2Fubm90IGJlIHVuZGVmaW5lZC4iKTt9 dmFyIEU9dGhpcy5nZXRTdWJzKEIpO2lmKCFGLmlzT2JqZWN0KEUpKXtFPW5ldyBP YmplY3QoKTt9RVtEXT1DO3JldHVybiB0aGlzLnNldFN1YnMoQixFLEEpO30sc2V0 U3ViczpmdW5jdGlvbihCLEMsQSl7dmFyIEU9WUFIT08ubGFuZztpZighRS5pc1N0 cmluZyhCKSl7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29va2llLnNldFN1YnMoKTog Q29va2llIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4iKTt9aWYoIUUuaXNPYmplY3Qo Qykpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkNvb2tpZS5zZXRTdWJzKCk6IENvb2tp ZSB2YWx1ZSBtdXN0IGJlIGFuIG9iamVjdC4iKTt9dmFyIEQ9dGhpcy5fY3JlYXRl Q29va2llU3RyaW5nKEIsdGhpcy5fY3JlYXRlQ29va2llSGFzaFN0cmluZyhDKSxm YWxzZSxBKTtkb2N1bWVudC5jb29raWU9RDtyZXR1cm4gRDt9fTtZQUhPTy5yZWdp c3RlcigiY29va2llIixZQUhPTy51dGlsLkNvb2tpZSx7dmVyc2lvbjoiMi43LjAi LGJ1aWxkOiIxNzk5In0pO2lmKCFZQUhPTy51dGlsLkRyYWdEcm9wTWdyKXtZQUhP Ty51dGlsLkRyYWdEcm9wTWdyPWZ1bmN0aW9uKCl7dmFyIEE9WUFIT08udXRpbC5F dmVudCxCPVlBSE9PLnV0aWwuRG9tO3JldHVybnt1c2VTaGltOmZhbHNlLF9zaGlt QWN0aXZlOmZhbHNlLF9zaGltU3RhdGU6ZmFsc2UsX2RlYnVnU2hpbTpmYWxzZSxf Y3JlYXRlU2hpbTpmdW5jdGlvbigpe3ZhciBDPWRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoImRpdiIpO0MuaWQ9Inl1aS1kZG0tc2hpbSI7aWYoZG9jdW1lbnQuYm9keS5m aXJzdENoaWxkKXtkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShDLGRvY3VtZW50 LmJvZHkuZmlyc3RDaGlsZCk7fWVsc2V7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls ZChDKTt9Qy5zdHlsZS5kaXNwbGF5PSJub25lIjtDLnN0eWxlLmJhY2tncm91bmRD b2xvcj0icmVkIjtDLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Qy5zdHlsZS56 SW5kZXg9Ijk5OTk5IjtCLnNldFN0eWxlKEMsIm9wYWNpdHkiLCIwIik7dGhpcy5f c2hpbT1DO0Eub24oQywibW91c2V1cCIsdGhpcy5oYW5kbGVNb3VzZVVwLHRoaXMs dHJ1ZSk7QS5vbihDLCJtb3VzZW1vdmUiLHRoaXMuaGFuZGxlTW91c2VNb3ZlLHRo aXMsdHJ1ZSk7QS5vbih3aW5kb3csInNjcm9sbCIsdGhpcy5fc2l6ZVNoaW0sdGhp cyx0cnVlKTt9LF9zaXplU2hpbTpmdW5jdGlvbigpe2lmKHRoaXMuX3NoaW1BY3Rp dmUpe3ZhciBDPXRoaXMuX3NoaW07Qy5zdHlsZS5oZWlnaHQ9Qi5nZXREb2N1bWVu dEhlaWdodCgpKyJweCI7Qy5zdHlsZS53aWR0aD1CLmdldERvY3VtZW50V2lkdGgo KSsicHgiO0Muc3R5bGUudG9wPSIwIjtDLnN0eWxlLmxlZnQ9IjAiO319LF9hY3Rp dmF0ZVNoaW06ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVNoaW0pe2lmKCF0aGlzLl9z aGltKXt0aGlzLl9jcmVhdGVTaGltKCk7fXRoaXMuX3NoaW1BY3RpdmU9dHJ1ZTt2 YXIgQz10aGlzLl9zaGltLEQ9IjAiO2lmKHRoaXMuX2RlYnVnU2hpbSl7RD0iLjUi O31CLnNldFN0eWxlKEMsIm9wYWNpdHkiLEQpO3RoaXMuX3NpemVTaGltKCk7Qy5z dHlsZS5kaXNwbGF5PSJibG9jayI7fX0sX2RlYWN0aXZhdGVTaGltOmZ1bmN0aW9u KCl7dGhpcy5fc2hpbS5zdHlsZS5kaXNwbGF5PSJub25lIjt0aGlzLl9zaGltQWN0 aXZlPWZhbHNlO30sX3NoaW06bnVsbCxpZHM6e30saGFuZGxlSWRzOnt9LGRyYWdD dXJyZW50Om51bGwsZHJhZ092ZXJzOnt9LGRlbHRhWDowLGRlbHRhWTowLHByZXZl bnREZWZhdWx0OnRydWUsc3RvcFByb3BhZ2F0aW9uOnRydWUsaW5pdGlhbGl6ZWQ6 ZmFsc2UsbG9ja2VkOmZhbHNlLGludGVyYWN0aW9uSW5mbzpudWxsLGluaXQ6ZnVu Y3Rpb24oKXt0aGlzLmluaXRpYWxpemVkPXRydWU7fSxQT0lOVDowLElOVEVSU0VD VDoxLFNUUklDVF9JTlRFUlNFQ1Q6Mixtb2RlOjAsX2V4ZWNPbkFsbDpmdW5jdGlv bihFLEQpe2Zvcih2YXIgRiBpbiB0aGlzLmlkcyl7Zm9yKHZhciBDIGluIHRoaXMu aWRzW0ZdKXt2YXIgRz10aGlzLmlkc1tGXVtDXTtpZighdGhpcy5pc1R5cGVPZkRE KEcpKXtjb250aW51ZTt9R1tFXS5hcHBseShHLEQpO319fSxfb25Mb2FkOmZ1bmN0 aW9uKCl7dGhpcy5pbml0KCk7QS5vbihkb2N1bWVudCwibW91c2V1cCIsdGhpcy5o YW5kbGVNb3VzZVVwLHRoaXMsdHJ1ZSk7QS5vbihkb2N1bWVudCwibW91c2Vtb3Zl Iix0aGlzLmhhbmRsZU1vdXNlTW92ZSx0aGlzLHRydWUpO0Eub24od2luZG93LCJ1 bmxvYWQiLHRoaXMuX29uVW5sb2FkLHRoaXMsdHJ1ZSk7QS5vbih3aW5kb3csInJl c2l6ZSIsdGhpcy5fb25SZXNpemUsdGhpcyx0cnVlKTt9LF9vblJlc2l6ZTpmdW5j dGlvbihDKXt0aGlzLl9leGVjT25BbGwoInJlc2V0Q29uc3RyYWludHMiLFtdKTt9 LGxvY2s6ZnVuY3Rpb24oKXt0aGlzLmxvY2tlZD10cnVlO30sdW5sb2NrOmZ1bmN0 aW9uKCl7dGhpcy5sb2NrZWQ9ZmFsc2U7fSxpc0xvY2tlZDpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLmxvY2tlZDt9LGxvY2F0aW9uQ2FjaGU6e30sdXNlQ2FjaGU6dHJ1 ZSxjbGlja1BpeGVsVGhyZXNoOjMsY2xpY2tUaW1lVGhyZXNoOjEwMDAsZHJhZ1Ro cmVzaE1ldDpmYWxzZSxjbGlja1RpbWVvdXQ6bnVsbCxzdGFydFg6MCxzdGFydFk6 MCxmcm9tVGltZW91dDpmYWxzZSxyZWdEcmFnRHJvcDpmdW5jdGlvbihELEMpe2lm KCF0aGlzLmluaXRpYWxpemVkKXt0aGlzLmluaXQoKTt9aWYoIXRoaXMuaWRzW0Nd KXt0aGlzLmlkc1tDXT17fTt9dGhpcy5pZHNbQ11bRC5pZF09RDt9LHJlbW92ZURE RnJvbUdyb3VwOmZ1bmN0aW9uKEUsQyl7aWYoIXRoaXMuaWRzW0NdKXt0aGlzLmlk c1tDXT17fTt9dmFyIEQ9dGhpcy5pZHNbQ107aWYoRCYmRFtFLmlkXSl7ZGVsZXRl IERbRS5pZF07fX0sX3JlbW92ZTpmdW5jdGlvbihFKXtmb3IodmFyIEQgaW4gRS5n cm91cHMpe2lmKEQpe3ZhciBDPXRoaXMuaWRzW0RdO2lmKEMmJkNbRS5pZF0pe2Rl bGV0ZSBDW0UuaWRdO319fWRlbGV0ZSB0aGlzLmhhbmRsZUlkc1tFLmlkXTt9LHJl Z0hhbmRsZTpmdW5jdGlvbihELEMpe2lmKCF0aGlzLmhhbmRsZUlkc1tEXSl7dGhp cy5oYW5kbGVJZHNbRF09e307fXRoaXMuaGFuZGxlSWRzW0RdW0NdPUM7fSxpc0Ry YWdEcm9wOmZ1bmN0aW9uKEMpe3JldHVybih0aGlzLmdldEREQnlJZChDKSk/dHJ1 ZTpmYWxzZTt9LGdldFJlbGF0ZWQ6ZnVuY3Rpb24oSCxEKXt2YXIgRz1bXTtmb3Io dmFyIEYgaW4gSC5ncm91cHMpe2Zvcih2YXIgRSBpbiB0aGlzLmlkc1tGXSl7dmFy IEM9dGhpcy5pZHNbRl1bRV07aWYoIXRoaXMuaXNUeXBlT2ZERChDKSl7Y29udGlu dWU7fWlmKCFEfHxDLmlzVGFyZ2V0KXtHW0cubGVuZ3RoXT1DO319fXJldHVybiBH O30saXNMZWdhbFRhcmdldDpmdW5jdGlvbihHLEYpe3ZhciBEPXRoaXMuZ2V0UmVs YXRlZChHLHRydWUpO2Zvcih2YXIgRT0wLEM9RC5sZW5ndGg7RTxDOysrRSl7aWYo RFtFXS5pZD09Ri5pZCl7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fSxpc1R5 cGVPZkREOmZ1bmN0aW9uKEMpe3JldHVybihDJiZDLl9feWdEcmFnRHJvcCk7fSxp c0hhbmRsZTpmdW5jdGlvbihELEMpe3JldHVybih0aGlzLmhhbmRsZUlkc1tEXSYm dGhpcy5oYW5kbGVJZHNbRF1bQ10pO30sZ2V0RERCeUlkOmZ1bmN0aW9uKEQpe2Zv cih2YXIgQyBpbiB0aGlzLmlkcyl7aWYodGhpcy5pZHNbQ11bRF0pe3JldHVybiB0 aGlzLmlkc1tDXVtEXTt9fXJldHVybiBudWxsO30saGFuZGxlTW91c2VEb3duOmZ1 bmN0aW9uKEUsRCl7dGhpcy5jdXJyZW50VGFyZ2V0PVlBSE9PLnV0aWwuRXZlbnQu Z2V0VGFyZ2V0KEUpO3RoaXMuZHJhZ0N1cnJlbnQ9RDt2YXIgQz1ELmdldEVsKCk7 dGhpcy5zdGFydFg9WUFIT08udXRpbC5FdmVudC5nZXRQYWdlWChFKTt0aGlzLnN0 YXJ0WT1ZQUhPTy51dGlsLkV2ZW50LmdldFBhZ2VZKEUpO3RoaXMuZGVsdGFYPXRo aXMuc3RhcnRYLUMub2Zmc2V0TGVmdDt0aGlzLmRlbHRhWT10aGlzLnN0YXJ0WS1D Lm9mZnNldFRvcDt0aGlzLmRyYWdUaHJlc2hNZXQ9ZmFsc2U7dGhpcy5jbGlja1Rp bWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBGPVlBSE9PLnV0aWwuRERN O0Yuc3RhcnREcmFnKEYuc3RhcnRYLEYuc3RhcnRZKTtGLmZyb21UaW1lb3V0PXRy dWU7fSx0aGlzLmNsaWNrVGltZVRocmVzaCk7fSxzdGFydERyYWc6ZnVuY3Rpb24o QyxFKXtpZih0aGlzLmRyYWdDdXJyZW50JiZ0aGlzLmRyYWdDdXJyZW50LnVzZVNo aW0pe3RoaXMuX3NoaW1TdGF0ZT10aGlzLnVzZVNoaW07dGhpcy51c2VTaGltPXRy dWU7fXRoaXMuX2FjdGl2YXRlU2hpbSgpO2NsZWFyVGltZW91dCh0aGlzLmNsaWNr VGltZW91dCk7dmFyIEQ9dGhpcy5kcmFnQ3VycmVudDtpZihEJiZELmV2ZW50cy5i NFN0YXJ0RHJhZyl7RC5iNFN0YXJ0RHJhZyhDLEUpO0QuZmlyZUV2ZW50KCJiNFN0 YXJ0RHJhZ0V2ZW50Iix7eDpDLHk6RX0pO31pZihEJiZELmV2ZW50cy5zdGFydERy YWcpe0Quc3RhcnREcmFnKEMsRSk7RC5maXJlRXZlbnQoInN0YXJ0RHJhZ0V2ZW50 Iix7eDpDLHk6RX0pO310aGlzLmRyYWdUaHJlc2hNZXQ9dHJ1ZTt9LGhhbmRsZU1v dXNlVXA6ZnVuY3Rpb24oQyl7aWYodGhpcy5kcmFnQ3VycmVudCl7Y2xlYXJUaW1l b3V0KHRoaXMuY2xpY2tUaW1lb3V0KTtpZih0aGlzLmRyYWdUaHJlc2hNZXQpe2lm KHRoaXMuZnJvbVRpbWVvdXQpe3RoaXMuZnJvbVRpbWVvdXQ9ZmFsc2U7dGhpcy5o YW5kbGVNb3VzZU1vdmUoQyk7fXRoaXMuZnJvbVRpbWVvdXQ9ZmFsc2U7dGhpcy5m aXJlRXZlbnRzKEMsdHJ1ZSk7fWVsc2V7fXRoaXMuc3RvcERyYWcoQyk7dGhpcy5z dG9wRXZlbnQoQyk7fX0sc3RvcEV2ZW50OmZ1bmN0aW9uKEMpe2lmKHRoaXMuc3Rv cFByb3BhZ2F0aW9uKXtZQUhPTy51dGlsLkV2ZW50LnN0b3BQcm9wYWdhdGlvbihD KTt9aWYodGhpcy5wcmV2ZW50RGVmYXVsdCl7WUFIT08udXRpbC5FdmVudC5wcmV2 ZW50RGVmYXVsdChDKTt9fSxzdG9wRHJhZzpmdW5jdGlvbihFLEQpe3ZhciBDPXRo aXMuZHJhZ0N1cnJlbnQ7aWYoQyYmIUQpe2lmKHRoaXMuZHJhZ1RocmVzaE1ldCl7 aWYoQy5ldmVudHMuYjRFbmREcmFnKXtDLmI0RW5kRHJhZyhFKTtDLmZpcmVFdmVu dCgiYjRFbmREcmFnRXZlbnQiLHtlOkV9KTt9aWYoQy5ldmVudHMuZW5kRHJhZyl7 Qy5lbmREcmFnKEUpO0MuZmlyZUV2ZW50KCJlbmREcmFnRXZlbnQiLHtlOkV9KTt9 fWlmKEMuZXZlbnRzLm1vdXNlVXApe0Mub25Nb3VzZVVwKEUpO0MuZmlyZUV2ZW50 KCJtb3VzZVVwRXZlbnQiLHtlOkV9KTt9fWlmKHRoaXMuX3NoaW1BY3RpdmUpe3Ro aXMuX2RlYWN0aXZhdGVTaGltKCk7aWYodGhpcy5kcmFnQ3VycmVudCYmdGhpcy5k cmFnQ3VycmVudC51c2VTaGltKXt0aGlzLnVzZVNoaW09dGhpcy5fc2hpbVN0YXRl O3RoaXMuX3NoaW1TdGF0ZT1mYWxzZTt9fXRoaXMuZHJhZ0N1cnJlbnQ9bnVsbDt0 aGlzLmRyYWdPdmVycz17fTt9LGhhbmRsZU1vdXNlTW92ZTpmdW5jdGlvbihGKXt2 YXIgQz10aGlzLmRyYWdDdXJyZW50O2lmKEMpe2lmKFlBSE9PLnV0aWwuRXZlbnQu aXNJRSYmIUYuYnV0dG9uKXt0aGlzLnN0b3BFdmVudChGKTtyZXR1cm4gdGhpcy5o YW5kbGVNb3VzZVVwKEYpO31lbHNle2lmKEYuY2xpZW50WDwwfHxGLmNsaWVudFk8 MCl7fX1pZighdGhpcy5kcmFnVGhyZXNoTWV0KXt2YXIgRT1NYXRoLmFicyh0aGlz LnN0YXJ0WC1ZQUhPTy51dGlsLkV2ZW50LmdldFBhZ2VYKEYpKTt2YXIgRD1NYXRo LmFicyh0aGlzLnN0YXJ0WS1ZQUhPTy51dGlsLkV2ZW50LmdldFBhZ2VZKEYpKTtp ZihFPnRoaXMuY2xpY2tQaXhlbFRocmVzaHx8RD50aGlzLmNsaWNrUGl4ZWxUaHJl c2gpe3RoaXMuc3RhcnREcmFnKHRoaXMuc3RhcnRYLHRoaXMuc3RhcnRZKTt9fWlm KHRoaXMuZHJhZ1RocmVzaE1ldCl7aWYoQyYmQy5ldmVudHMuYjREcmFnKXtDLmI0 RHJhZyhGKTtDLmZpcmVFdmVudCgiYjREcmFnRXZlbnQiLHtlOkZ9KTt9aWYoQyYm Qy5ldmVudHMuZHJhZyl7Qy5vbkRyYWcoRik7Qy5maXJlRXZlbnQoImRyYWdFdmVu dCIse2U6Rn0pO31pZihDKXt0aGlzLmZpcmVFdmVudHMoRixmYWxzZSk7fX10aGlz LnN0b3BFdmVudChGKTt9fSxmaXJlRXZlbnRzOmZ1bmN0aW9uKFYsTCl7dmFyIGE9 dGhpcy5kcmFnQ3VycmVudDtpZighYXx8YS5pc0xvY2tlZCgpfHxhLmRyYWdPbmx5 KXtyZXR1cm47fXZhciBOPVlBSE9PLnV0aWwuRXZlbnQuZ2V0UGFnZVgoViksTT1Z QUhPTy51dGlsLkV2ZW50LmdldFBhZ2VZKFYpLFA9bmV3IFlBSE9PLnV0aWwuUG9p bnQoTixNKSxLPWEuZ2V0VGFyZ2V0Q29vcmQoUC54LFAueSksRj1hLmdldERyYWdF bCgpLEU9WyJvdXQiLCJvdmVyIiwiZHJvcCIsImVudGVyIl0sVT1uZXcgWUFIT08u dXRpbC5SZWdpb24oSy55LEsueCtGLm9mZnNldFdpZHRoLEsueStGLm9mZnNldEhl aWdodCxLLngpLEk9W10sRD17fSxRPVtdLGM9e291dEV2dHM6W10sb3ZlckV2dHM6 W10sZHJvcEV2dHM6W10sZW50ZXJFdnRzOltdfTtmb3IodmFyIFMgaW4gdGhpcy5k cmFnT3ZlcnMpe3ZhciBkPXRoaXMuZHJhZ092ZXJzW1NdO2lmKCF0aGlzLmlzVHlw ZU9mREQoZCkpe2NvbnRpbnVlO31pZighdGhpcy5pc092ZXJUYXJnZXQoUCxkLHRo aXMubW9kZSxVKSl7Yy5vdXRFdnRzLnB1c2goZCk7fUlbU109dHJ1ZTtkZWxldGUg dGhpcy5kcmFnT3ZlcnNbU107fWZvcih2YXIgUiBpbiBhLmdyb3Vwcyl7aWYoInN0 cmluZyIhPXR5cGVvZiBSKXtjb250aW51ZTt9Zm9yKFMgaW4gdGhpcy5pZHNbUl0p e3ZhciBHPXRoaXMuaWRzW1JdW1NdO2lmKCF0aGlzLmlzVHlwZU9mREQoRykpe2Nv bnRpbnVlO31pZihHLmlzVGFyZ2V0JiYhRy5pc0xvY2tlZCgpJiZHIT1hKXtpZih0 aGlzLmlzT3ZlclRhcmdldChQLEcsdGhpcy5tb2RlLFUpKXtEW1JdPXRydWU7aWYo TCl7Yy5kcm9wRXZ0cy5wdXNoKEcpO31lbHNle2lmKCFJW0cuaWRdKXtjLmVudGVy RXZ0cy5wdXNoKEcpO31lbHNle2Mub3ZlckV2dHMucHVzaChHKTt9dGhpcy5kcmFn T3ZlcnNbRy5pZF09Rzt9fX19fXRoaXMuaW50ZXJhY3Rpb25JbmZvPXtvdXQ6Yy5v dXRFdnRzLGVudGVyOmMuZW50ZXJFdnRzLG92ZXI6Yy5vdmVyRXZ0cyxkcm9wOmMu ZHJvcEV2dHMscG9pbnQ6UCxkcmFnZ2VkUmVnaW9uOlUsc291cmNlUmVnaW9uOnRo aXMubG9jYXRpb25DYWNoZVthLmlkXSx2YWxpZERyb3A6TH07Zm9yKHZhciBDIGlu IEQpe1EucHVzaChDKTt9aWYoTCYmIWMuZHJvcEV2dHMubGVuZ3RoKXt0aGlzLmlu dGVyYWN0aW9uSW5mby52YWxpZERyb3A9ZmFsc2U7aWYoYS5ldmVudHMuaW52YWxp ZERyb3Ape2Eub25JbnZhbGlkRHJvcChWKTthLmZpcmVFdmVudCgiaW52YWxpZERy b3BFdmVudCIse2U6Vn0pO319Zm9yKFM9MDtTPEUubGVuZ3RoO1MrKyl7dmFyIFk9 bnVsbDtpZihjW0VbU10rIkV2dHMiXSl7WT1jW0VbU10rIkV2dHMiXTt9aWYoWSYm WS5sZW5ndGgpe3ZhciBIPUVbU10uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrRVtT XS5zdWJzdHIoMSksWD0ib25EcmFnIitILEo9ImI0RHJhZyIrSCxPPSJkcmFnIitI KyJFdmVudCIsVz0iZHJhZyIrSDtpZih0aGlzLm1vZGUpe2lmKGEuZXZlbnRzW0pd KXthW0pdKFYsWSxRKTthLmZpcmVFdmVudChKKyJFdmVudCIse2V2ZW50OlYsaW5m bzpZLGdyb3VwOlF9KTt9aWYoYS5ldmVudHNbV10pe2FbWF0oVixZLFEpO2EuZmly ZUV2ZW50KE8se2V2ZW50OlYsaW5mbzpZLGdyb3VwOlF9KTt9fWVsc2V7Zm9yKHZh ciBaPTAsVD1ZLmxlbmd0aDtaPFQ7KytaKXtpZihhLmV2ZW50c1tKXSl7YVtKXShW LFlbWl0uaWQsUVswXSk7YS5maXJlRXZlbnQoSisiRXZlbnQiLHtldmVudDpWLGlu Zm86WVtaXS5pZCxncm91cDpRWzBdfSk7fWlmKGEuZXZlbnRzW1ddKXthW1hdKFYs WVtaXS5pZCxRWzBdKTthLmZpcmVFdmVudChPLHtldmVudDpWLGluZm86WVtaXS5p ZCxncm91cDpRWzBdfSk7fX19fX19LGdldEJlc3RNYXRjaDpmdW5jdGlvbihFKXt2 YXIgRz1udWxsO3ZhciBEPUUubGVuZ3RoO2lmKEQ9PTEpe0c9RVswXTt9ZWxzZXtm b3IodmFyIEY9MDtGPEQ7KytGKXt2YXIgQz1FW0ZdO2lmKHRoaXMubW9kZT09dGhp cy5JTlRFUlNFQ1QmJkMuY3Vyc29ySXNPdmVyKXtHPUM7YnJlYWs7fWVsc2V7aWYo IUd8fCFHLm92ZXJsYXB8fChDLm92ZXJsYXAmJkcub3ZlcmxhcC5nZXRBcmVhKCk8 Qy5vdmVybGFwLmdldEFyZWEoKSkpe0c9Qzt9fX19cmV0dXJuIEc7fSxyZWZyZXNo Q2FjaGU6ZnVuY3Rpb24oRCl7dmFyIEY9RHx8dGhpcy5pZHM7Zm9yKHZhciBDIGlu IEYpe2lmKCJzdHJpbmciIT10eXBlb2YgQyl7Y29udGludWU7fWZvcih2YXIgRSBp biB0aGlzLmlkc1tDXSl7dmFyIEc9dGhpcy5pZHNbQ11bRV07aWYodGhpcy5pc1R5 cGVPZkREKEcpKXt2YXIgSD10aGlzLmdldExvY2F0aW9uKEcpO2lmKEgpe3RoaXMu bG9jYXRpb25DYWNoZVtHLmlkXT1IO31lbHNle2RlbGV0ZSB0aGlzLmxvY2F0aW9u Q2FjaGVbRy5pZF07fX19fX0sdmVyaWZ5RWw6ZnVuY3Rpb24oRCl7dHJ5e2lmKEQp e3ZhciBDPUQub2Zmc2V0UGFyZW50O2lmKEMpe3JldHVybiB0cnVlO319fWNhdGNo KEUpe31yZXR1cm4gZmFsc2U7fSxnZXRMb2NhdGlvbjpmdW5jdGlvbihIKXtpZigh dGhpcy5pc1R5cGVPZkREKEgpKXtyZXR1cm4gbnVsbDt9dmFyIEY9SC5nZXRFbCgp LEssRSxELE0sTCxOLEMsSixHO3RyeXtLPVlBSE9PLnV0aWwuRG9tLmdldFhZKEYp O31jYXRjaChJKXt9aWYoIUspe3JldHVybiBudWxsO31FPUtbMF07RD1FK0Yub2Zm c2V0V2lkdGg7TT1LWzFdO0w9TStGLm9mZnNldEhlaWdodDtOPU0tSC5wYWRkaW5n WzBdO0M9RCtILnBhZGRpbmdbMV07Sj1MK0gucGFkZGluZ1syXTtHPUUtSC5wYWRk aW5nWzNdO3JldHVybiBuZXcgWUFIT08udXRpbC5SZWdpb24oTixDLEosRyk7fSxp c092ZXJUYXJnZXQ6ZnVuY3Rpb24oSyxDLEUsRil7dmFyIEc9dGhpcy5sb2NhdGlv bkNhY2hlW0MuaWRdO2lmKCFHfHwhdGhpcy51c2VDYWNoZSl7Rz10aGlzLmdldExv Y2F0aW9uKEMpO3RoaXMubG9jYXRpb25DYWNoZVtDLmlkXT1HO31pZighRyl7cmV0 dXJuIGZhbHNlO31DLmN1cnNvcklzT3Zlcj1HLmNvbnRhaW5zKEspO3ZhciBKPXRo aXMuZHJhZ0N1cnJlbnQ7aWYoIUp8fCghRSYmIUouY29uc3RyYWluWCYmIUouY29u c3RyYWluWSkpe3JldHVybiBDLmN1cnNvcklzT3Zlcjt9Qy5vdmVybGFwPW51bGw7 aWYoIUYpe3ZhciBIPUouZ2V0VGFyZ2V0Q29vcmQoSy54LEsueSk7dmFyIEQ9Si5n ZXREcmFnRWwoKTtGPW5ldyBZQUhPTy51dGlsLlJlZ2lvbihILnksSC54K0Qub2Zm c2V0V2lkdGgsSC55K0Qub2Zmc2V0SGVpZ2h0LEgueCk7fXZhciBJPUYuaW50ZXJz ZWN0KEcpO2lmKEkpe0Mub3ZlcmxhcD1JO3JldHVybihFKT90cnVlOkMuY3Vyc29y SXNPdmVyO31lbHNle3JldHVybiBmYWxzZTt9fSxfb25VbmxvYWQ6ZnVuY3Rpb24o RCxDKXt0aGlzLnVucmVnQWxsKCk7fSx1bnJlZ0FsbDpmdW5jdGlvbigpe2lmKHRo aXMuZHJhZ0N1cnJlbnQpe3RoaXMuc3RvcERyYWcoKTt0aGlzLmRyYWdDdXJyZW50 PW51bGw7fXRoaXMuX2V4ZWNPbkFsbCgidW5yZWciLFtdKTt0aGlzLmlkcz17fTt9 LGVsZW1lbnRDYWNoZTp7fSxnZXRFbFdyYXBwZXI6ZnVuY3Rpb24oRCl7dmFyIEM9 dGhpcy5lbGVtZW50Q2FjaGVbRF07aWYoIUN8fCFDLmVsKXtDPXRoaXMuZWxlbWVu dENhY2hlW0RdPW5ldyB0aGlzLkVsZW1lbnRXcmFwcGVyKFlBSE9PLnV0aWwuRG9t LmdldChEKSk7fXJldHVybiBDO30sZ2V0RWxlbWVudDpmdW5jdGlvbihDKXtyZXR1 cm4gWUFIT08udXRpbC5Eb20uZ2V0KEMpO30sZ2V0Q3NzOmZ1bmN0aW9uKEQpe3Zh ciBDPVlBSE9PLnV0aWwuRG9tLmdldChEKTtyZXR1cm4oQyk/Qy5zdHlsZTpudWxs O30sRWxlbWVudFdyYXBwZXI6ZnVuY3Rpb24oQyl7dGhpcy5lbD1DfHxudWxsO3Ro aXMuaWQ9dGhpcy5lbCYmQy5pZDt0aGlzLmNzcz10aGlzLmVsJiZDLnN0eWxlO30s Z2V0UG9zWDpmdW5jdGlvbihDKXtyZXR1cm4gWUFIT08udXRpbC5Eb20uZ2V0WChD KTt9LGdldFBvc1k6ZnVuY3Rpb24oQyl7cmV0dXJuIFlBSE9PLnV0aWwuRG9tLmdl dFkoQyk7fSxzd2FwTm9kZTpmdW5jdGlvbihFLEMpe2lmKEUuc3dhcE5vZGUpe0Uu c3dhcE5vZGUoQyk7fWVsc2V7dmFyIEY9Qy5wYXJlbnROb2RlO3ZhciBEPUMubmV4 dFNpYmxpbmc7aWYoRD09RSl7Ri5pbnNlcnRCZWZvcmUoRSxDKTt9ZWxzZXtpZihD PT1FLm5leHRTaWJsaW5nKXtGLmluc2VydEJlZm9yZShDLEUpO31lbHNle0UucGFy ZW50Tm9kZS5yZXBsYWNlQ2hpbGQoQyxFKTtGLmluc2VydEJlZm9yZShFLEQpO319 fX0sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIEUsQyxGPWRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudCxEPWRvY3VtZW50LmJvZHk7aWYoRiYmKEYuc2Nyb2xsVG9wfHxG LnNjcm9sbExlZnQpKXtFPUYuc2Nyb2xsVG9wO0M9Ri5zY3JvbGxMZWZ0O31lbHNl e2lmKEQpe0U9RC5zY3JvbGxUb3A7Qz1ELnNjcm9sbExlZnQ7fWVsc2V7fX1yZXR1 cm57dG9wOkUsbGVmdDpDfTt9LGdldFN0eWxlOmZ1bmN0aW9uKEQsQyl7cmV0dXJu IFlBSE9PLnV0aWwuRG9tLmdldFN0eWxlKEQsQyk7fSxnZXRTY3JvbGxUb3A6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS50b3A7fSxnZXRTY3JvbGxM ZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkubGVmdDt9LG1v dmVUb0VsOmZ1bmN0aW9uKEMsRSl7dmFyIEQ9WUFIT08udXRpbC5Eb20uZ2V0WFko RSk7WUFIT08udXRpbC5Eb20uc2V0WFkoQyxEKTt9LGdldENsaWVudEhlaWdodDpm dW5jdGlvbigpe3JldHVybiBZQUhPTy51dGlsLkRvbS5nZXRWaWV3cG9ydEhlaWdo dCgpO30sZ2V0Q2xpZW50V2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gWUFIT08udXRp bC5Eb20uZ2V0Vmlld3BvcnRXaWR0aCgpO30sbnVtZXJpY1NvcnQ6ZnVuY3Rpb24o RCxDKXtyZXR1cm4oRC1DKTt9LF90aW1lb3V0Q291bnQ6MCxfYWRkTGlzdGVuZXJz OmZ1bmN0aW9uKCl7dmFyIEM9WUFIT08udXRpbC5ERE07aWYoWUFIT08udXRpbC5F dmVudCYmZG9jdW1lbnQpe0MuX29uTG9hZCgpO31lbHNle2lmKEMuX3RpbWVvdXRD b3VudD4yMDAwKXt9ZWxzZXtzZXRUaW1lb3V0KEMuX2FkZExpc3RlbmVycywxMCk7 aWYoZG9jdW1lbnQmJmRvY3VtZW50LmJvZHkpe0MuX3RpbWVvdXRDb3VudCs9MTt9 fX19LGhhbmRsZVdhc0NsaWNrZWQ6ZnVuY3Rpb24oQyxFKXtpZih0aGlzLmlzSGFu ZGxlKEUsQy5pZCkpe3JldHVybiB0cnVlO31lbHNle3ZhciBEPUMucGFyZW50Tm9k ZTt3aGlsZShEKXtpZih0aGlzLmlzSGFuZGxlKEUsRC5pZCkpe3JldHVybiB0cnVl O31lbHNle0Q9RC5wYXJlbnROb2RlO319fXJldHVybiBmYWxzZTt9fTt9KCk7WUFI T08udXRpbC5ERE09WUFIT08udXRpbC5EcmFnRHJvcE1ncjtZQUhPTy51dGlsLkRE TS5fYWRkTGlzdGVuZXJzKCk7fShmdW5jdGlvbigpe3ZhciBBPVlBSE9PLnV0aWwu RXZlbnQ7dmFyIEI9WUFIT08udXRpbC5Eb207WUFIT08udXRpbC5EcmFnRHJvcD1m dW5jdGlvbihFLEMsRCl7aWYoRSl7dGhpcy5pbml0KEUsQyxEKTt9fTtZQUhPTy51 dGlsLkRyYWdEcm9wLnByb3RvdHlwZT17ZXZlbnRzOm51bGwsb246ZnVuY3Rpb24o KXt0aGlzLnN1YnNjcmliZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSxpZDpudWxs LGNvbmZpZzpudWxsLGRyYWdFbElkOm51bGwsaGFuZGxlRWxJZDpudWxsLGludmFs aWRIYW5kbGVUeXBlczpudWxsLGludmFsaWRIYW5kbGVJZHM6bnVsbCxpbnZhbGlk SGFuZGxlQ2xhc3NlczpudWxsLHN0YXJ0UGFnZVg6MCxzdGFydFBhZ2VZOjAsZ3Jv dXBzOm51bGwsbG9ja2VkOmZhbHNlLGxvY2s6ZnVuY3Rpb24oKXt0aGlzLmxvY2tl ZD10cnVlO30sdW5sb2NrOmZ1bmN0aW9uKCl7dGhpcy5sb2NrZWQ9ZmFsc2U7fSxp c1RhcmdldDp0cnVlLHBhZGRpbmc6bnVsbCxkcmFnT25seTpmYWxzZSx1c2VTaGlt OmZhbHNlLF9kb21SZWY6bnVsbCxfX3lnRHJhZ0Ryb3A6dHJ1ZSxjb25zdHJhaW5Y OmZhbHNlLGNvbnN0cmFpblk6ZmFsc2UsbWluWDowLG1heFg6MCxtaW5ZOjAsbWF4 WTowLGRlbHRhWDowLGRlbHRhWTowLG1haW50YWluT2Zmc2V0OmZhbHNlLHhUaWNr czpudWxsLHlUaWNrczpudWxsLHByaW1hcnlCdXR0b25Pbmx5OnRydWUsYXZhaWxh YmxlOmZhbHNlLGhhc091dGVySGFuZGxlczpmYWxzZSxjdXJzb3JJc092ZXI6ZmFs c2Usb3ZlcmxhcDpudWxsLGI0U3RhcnREcmFnOmZ1bmN0aW9uKEMsRCl7fSxzdGFy dERyYWc6ZnVuY3Rpb24oQyxEKXt9LGI0RHJhZzpmdW5jdGlvbihDKXt9LG9uRHJh ZzpmdW5jdGlvbihDKXt9LG9uRHJhZ0VudGVyOmZ1bmN0aW9uKEMsRCl7fSxiNERy YWdPdmVyOmZ1bmN0aW9uKEMpe30sb25EcmFnT3ZlcjpmdW5jdGlvbihDLEQpe30s YjREcmFnT3V0OmZ1bmN0aW9uKEMpe30sb25EcmFnT3V0OmZ1bmN0aW9uKEMsRCl7 fSxiNERyYWdEcm9wOmZ1bmN0aW9uKEMpe30sb25EcmFnRHJvcDpmdW5jdGlvbihD LEQpe30sb25JbnZhbGlkRHJvcDpmdW5jdGlvbihDKXt9LGI0RW5kRHJhZzpmdW5j dGlvbihDKXt9LGVuZERyYWc6ZnVuY3Rpb24oQyl7fSxiNE1vdXNlRG93bjpmdW5j dGlvbihDKXt9LG9uTW91c2VEb3duOmZ1bmN0aW9uKEMpe30sb25Nb3VzZVVwOmZ1 bmN0aW9uKEMpe30sb25BdmFpbGFibGU6ZnVuY3Rpb24oKXt9LGdldEVsOmZ1bmN0 aW9uKCl7aWYoIXRoaXMuX2RvbVJlZil7dGhpcy5fZG9tUmVmPUIuZ2V0KHRoaXMu aWQpO31yZXR1cm4gdGhpcy5fZG9tUmVmO30sZ2V0RHJhZ0VsOmZ1bmN0aW9uKCl7 cmV0dXJuIEIuZ2V0KHRoaXMuZHJhZ0VsSWQpO30saW5pdDpmdW5jdGlvbihGLEMs RCl7dGhpcy5pbml0VGFyZ2V0KEYsQyxEKTtBLm9uKHRoaXMuX2RvbVJlZnx8dGhp cy5pZCwibW91c2Vkb3duIix0aGlzLmhhbmRsZU1vdXNlRG93bix0aGlzLHRydWUp O2Zvcih2YXIgRSBpbiB0aGlzLmV2ZW50cyl7dGhpcy5jcmVhdGVFdmVudChFKyJF dmVudCIpO319LGluaXRUYXJnZXQ6ZnVuY3Rpb24oRSxDLEQpe3RoaXMuY29uZmln PUR8fHt9O3RoaXMuZXZlbnRzPXt9O3RoaXMuRERNPVlBSE9PLnV0aWwuRERNO3Ro aXMuZ3JvdXBzPXt9O2lmKHR5cGVvZiBFIT09InN0cmluZyIpe3RoaXMuX2RvbVJl Zj1FO0U9Qi5nZW5lcmF0ZUlkKEUpO310aGlzLmlkPUU7dGhpcy5hZGRUb0dyb3Vw KChDKT9DOiJkZWZhdWx0Iik7dGhpcy5oYW5kbGVFbElkPUU7QS5vbkF2YWlsYWJs ZShFLHRoaXMuaGFuZGxlT25BdmFpbGFibGUsdGhpcyx0cnVlKTt0aGlzLnNldERy YWdFbElkKEUpO3RoaXMuaW52YWxpZEhhbmRsZVR5cGVzPXtBOiJBIn07dGhpcy5p bnZhbGlkSGFuZGxlSWRzPXt9O3RoaXMuaW52YWxpZEhhbmRsZUNsYXNzZXM9W107 dGhpcy5hcHBseUNvbmZpZygpO30sYXBwbHlDb25maWc6ZnVuY3Rpb24oKXt0aGlz LmV2ZW50cz17bW91c2VEb3duOnRydWUsYjRNb3VzZURvd246dHJ1ZSxtb3VzZVVw OnRydWUsYjRTdGFydERyYWc6dHJ1ZSxzdGFydERyYWc6dHJ1ZSxiNEVuZERyYWc6 dHJ1ZSxlbmREcmFnOnRydWUsZHJhZzp0cnVlLGI0RHJhZzp0cnVlLGludmFsaWRE cm9wOnRydWUsYjREcmFnT3V0OnRydWUsZHJhZ091dDp0cnVlLGRyYWdFbnRlcjp0 cnVlLGI0RHJhZ092ZXI6dHJ1ZSxkcmFnT3Zlcjp0cnVlLGI0RHJhZ0Ryb3A6dHJ1 ZSxkcmFnRHJvcDp0cnVlfTtpZih0aGlzLmNvbmZpZy5ldmVudHMpe2Zvcih2YXIg QyBpbiB0aGlzLmNvbmZpZy5ldmVudHMpe2lmKHRoaXMuY29uZmlnLmV2ZW50c1tD XT09PWZhbHNlKXt0aGlzLmV2ZW50c1tDXT1mYWxzZTt9fX10aGlzLnBhZGRpbmc9 dGhpcy5jb25maWcucGFkZGluZ3x8WzAsMCwwLDBdO3RoaXMuaXNUYXJnZXQ9KHRo aXMuY29uZmlnLmlzVGFyZ2V0IT09ZmFsc2UpO3RoaXMubWFpbnRhaW5PZmZzZXQ9 KHRoaXMuY29uZmlnLm1haW50YWluT2Zmc2V0KTt0aGlzLnByaW1hcnlCdXR0b25P bmx5PSh0aGlzLmNvbmZpZy5wcmltYXJ5QnV0dG9uT25seSE9PWZhbHNlKTt0aGlz LmRyYWdPbmx5PSgodGhpcy5jb25maWcuZHJhZ09ubHk9PT10cnVlKT90cnVlOmZh bHNlKTt0aGlzLnVzZVNoaW09KCh0aGlzLmNvbmZpZy51c2VTaGltPT09dHJ1ZSk/ dHJ1ZTpmYWxzZSk7fSxoYW5kbGVPbkF2YWlsYWJsZTpmdW5jdGlvbigpe3RoaXMu YXZhaWxhYmxlPXRydWU7dGhpcy5yZXNldENvbnN0cmFpbnRzKCk7dGhpcy5vbkF2 YWlsYWJsZSgpO30sc2V0UGFkZGluZzpmdW5jdGlvbihFLEMsRixEKXtpZighQyYm MCE9PUMpe3RoaXMucGFkZGluZz1bRSxFLEUsRV07fWVsc2V7aWYoIUYmJjAhPT1G KXt0aGlzLnBhZGRpbmc9W0UsQyxFLENdO31lbHNle3RoaXMucGFkZGluZz1bRSxD LEYsRF07fX19LHNldEluaXRQb3NpdGlvbjpmdW5jdGlvbihGLEUpe3ZhciBHPXRo aXMuZ2V0RWwoKTtpZighdGhpcy5ERE0udmVyaWZ5RWwoRykpe2lmKEcmJkcuc3R5 bGUmJihHLnN0eWxlLmRpc3BsYXk9PSJub25lIikpe31lbHNle31yZXR1cm47fXZh ciBEPUZ8fDA7dmFyIEM9RXx8MDt2YXIgSD1CLmdldFhZKEcpO3RoaXMuaW5pdFBh Z2VYPUhbMF0tRDt0aGlzLmluaXRQYWdlWT1IWzFdLUM7dGhpcy5sYXN0UGFnZVg9 SFswXTt0aGlzLmxhc3RQYWdlWT1IWzFdO3RoaXMuc2V0U3RhcnRQb3NpdGlvbihI KTt9LHNldFN0YXJ0UG9zaXRpb246ZnVuY3Rpb24oRCl7dmFyIEM9RHx8Qi5nZXRY WSh0aGlzLmdldEVsKCkpO3RoaXMuZGVsdGFTZXRYWT1udWxsO3RoaXMuc3RhcnRQ YWdlWD1DWzBdO3RoaXMuc3RhcnRQYWdlWT1DWzFdO30sYWRkVG9Hcm91cDpmdW5j dGlvbihDKXt0aGlzLmdyb3Vwc1tDXT10cnVlO3RoaXMuRERNLnJlZ0RyYWdEcm9w KHRoaXMsQyk7fSxyZW1vdmVGcm9tR3JvdXA6ZnVuY3Rpb24oQyl7aWYodGhpcy5n cm91cHNbQ10pe2RlbGV0ZSB0aGlzLmdyb3Vwc1tDXTt9dGhpcy5ERE0ucmVtb3Zl RERGcm9tR3JvdXAodGhpcyxDKTt9LHNldERyYWdFbElkOmZ1bmN0aW9uKEMpe3Ro aXMuZHJhZ0VsSWQ9Qzt9LHNldEhhbmRsZUVsSWQ6ZnVuY3Rpb24oQyl7aWYodHlw ZW9mIEMhPT0ic3RyaW5nIil7Qz1CLmdlbmVyYXRlSWQoQyk7fXRoaXMuaGFuZGxl RWxJZD1DO3RoaXMuRERNLnJlZ0hhbmRsZSh0aGlzLmlkLEMpO30sc2V0T3V0ZXJI YW5kbGVFbElkOmZ1bmN0aW9uKEMpe2lmKHR5cGVvZiBDIT09InN0cmluZyIpe0M9 Qi5nZW5lcmF0ZUlkKEMpO31BLm9uKEMsIm1vdXNlZG93biIsdGhpcy5oYW5kbGVN b3VzZURvd24sdGhpcyx0cnVlKTt0aGlzLnNldEhhbmRsZUVsSWQoQyk7dGhpcy5o YXNPdXRlckhhbmRsZXM9dHJ1ZTt9LHVucmVnOmZ1bmN0aW9uKCl7QS5yZW1vdmVM aXN0ZW5lcih0aGlzLmlkLCJtb3VzZWRvd24iLHRoaXMuaGFuZGxlTW91c2VEb3du KTt0aGlzLl9kb21SZWY9bnVsbDt0aGlzLkRETS5fcmVtb3ZlKHRoaXMpO30saXNM b2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5ERE0uaXNMb2NrZWQoKXx8dGhp cy5sb2NrZWQpO30saGFuZGxlTW91c2VEb3duOmZ1bmN0aW9uKEosSSl7dmFyIEQ9 Si53aGljaHx8Si5idXR0b247aWYodGhpcy5wcmltYXJ5QnV0dG9uT25seSYmRD4x KXtyZXR1cm47fWlmKHRoaXMuaXNMb2NrZWQoKSl7cmV0dXJuO312YXIgQz10aGlz LmI0TW91c2VEb3duKEopLEY9dHJ1ZTtpZih0aGlzLmV2ZW50cy5iNE1vdXNlRG93 bil7Rj10aGlzLmZpcmVFdmVudCgiYjRNb3VzZURvd25FdmVudCIsSik7fXZhciBF PXRoaXMub25Nb3VzZURvd24oSiksSD10cnVlO2lmKHRoaXMuZXZlbnRzLm1vdXNl RG93bil7SD10aGlzLmZpcmVFdmVudCgibW91c2VEb3duRXZlbnQiLEopO31pZigo Qz09PWZhbHNlKXx8KEU9PT1mYWxzZSl8fChGPT09ZmFsc2UpfHwoSD09PWZhbHNl KSl7cmV0dXJuO310aGlzLkRETS5yZWZyZXNoQ2FjaGUodGhpcy5ncm91cHMpO3Zh ciBHPW5ldyBZQUhPTy51dGlsLlBvaW50KEEuZ2V0UGFnZVgoSiksQS5nZXRQYWdl WShKKSk7aWYoIXRoaXMuaGFzT3V0ZXJIYW5kbGVzJiYhdGhpcy5ERE0uaXNPdmVy VGFyZ2V0KEcsdGhpcykpe31lbHNle2lmKHRoaXMuY2xpY2tWYWxpZGF0b3IoSikp e3RoaXMuc2V0U3RhcnRQb3NpdGlvbigpO3RoaXMuRERNLmhhbmRsZU1vdXNlRG93 bihKLHRoaXMpO3RoaXMuRERNLnN0b3BFdmVudChKKTt9ZWxzZXt9fX0sY2xpY2tW YWxpZGF0b3I6ZnVuY3Rpb24oRCl7dmFyIEM9WUFIT08udXRpbC5FdmVudC5nZXRU YXJnZXQoRCk7cmV0dXJuKHRoaXMuaXNWYWxpZEhhbmRsZUNoaWxkKEMpJiYodGhp cy5pZD09dGhpcy5oYW5kbGVFbElkfHx0aGlzLkRETS5oYW5kbGVXYXNDbGlja2Vk KEMsdGhpcy5pZCkpKTt9LGdldFRhcmdldENvb3JkOmZ1bmN0aW9uKEUsRCl7dmFy IEM9RS10aGlzLmRlbHRhWDt2YXIgRj1ELXRoaXMuZGVsdGFZO2lmKHRoaXMuY29u c3RyYWluWCl7aWYoQzx0aGlzLm1pblgpe0M9dGhpcy5taW5YO31pZihDPnRoaXMu bWF4WCl7Qz10aGlzLm1heFg7fX1pZih0aGlzLmNvbnN0cmFpblkpe2lmKEY8dGhp cy5taW5ZKXtGPXRoaXMubWluWTt9aWYoRj50aGlzLm1heFkpe0Y9dGhpcy5tYXhZ O319Qz10aGlzLmdldFRpY2soQyx0aGlzLnhUaWNrcyk7Rj10aGlzLmdldFRpY2so Rix0aGlzLnlUaWNrcyk7cmV0dXJue3g6Qyx5OkZ9O30sYWRkSW52YWxpZEhhbmRs ZVR5cGU6ZnVuY3Rpb24oQyl7dmFyIEQ9Qy50b1VwcGVyQ2FzZSgpO3RoaXMuaW52 YWxpZEhhbmRsZVR5cGVzW0RdPUQ7fSxhZGRJbnZhbGlkSGFuZGxlSWQ6ZnVuY3Rp b24oQyl7aWYodHlwZW9mIEMhPT0ic3RyaW5nIil7Qz1CLmdlbmVyYXRlSWQoQyk7 fXRoaXMuaW52YWxpZEhhbmRsZUlkc1tDXT1DO30sYWRkSW52YWxpZEhhbmRsZUNs YXNzOmZ1bmN0aW9uKEMpe3RoaXMuaW52YWxpZEhhbmRsZUNsYXNzZXMucHVzaChD KTt9LHJlbW92ZUludmFsaWRIYW5kbGVUeXBlOmZ1bmN0aW9uKEMpe3ZhciBEPUMu dG9VcHBlckNhc2UoKTtkZWxldGUgdGhpcy5pbnZhbGlkSGFuZGxlVHlwZXNbRF07 fSxyZW1vdmVJbnZhbGlkSGFuZGxlSWQ6ZnVuY3Rpb24oQyl7aWYodHlwZW9mIEMh PT0ic3RyaW5nIil7Qz1CLmdlbmVyYXRlSWQoQyk7fWRlbGV0ZSB0aGlzLmludmFs aWRIYW5kbGVJZHNbQ107fSxyZW1vdmVJbnZhbGlkSGFuZGxlQ2xhc3M6ZnVuY3Rp b24oRCl7Zm9yKHZhciBFPTAsQz10aGlzLmludmFsaWRIYW5kbGVDbGFzc2VzLmxl bmd0aDtFPEM7KytFKXtpZih0aGlzLmludmFsaWRIYW5kbGVDbGFzc2VzW0VdPT1E KXtkZWxldGUgdGhpcy5pbnZhbGlkSGFuZGxlQ2xhc3Nlc1tFXTt9fX0saXNWYWxp ZEhhbmRsZUNoaWxkOmZ1bmN0aW9uKEYpe3ZhciBFPXRydWU7dmFyIEg7dHJ5e0g9 Ri5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpO31jYXRjaChHKXtIPUYubm9kZU5hbWU7 fUU9RSYmIXRoaXMuaW52YWxpZEhhbmRsZVR5cGVzW0hdO0U9RSYmIXRoaXMuaW52 YWxpZEhhbmRsZUlkc1tGLmlkXTtmb3IodmFyIEQ9MCxDPXRoaXMuaW52YWxpZEhh bmRsZUNsYXNzZXMubGVuZ3RoO0UmJkQ8QzsrK0Qpe0U9IUIuaGFzQ2xhc3MoRix0 aGlzLmludmFsaWRIYW5kbGVDbGFzc2VzW0RdKTt9cmV0dXJuIEU7fSxzZXRYVGlj a3M6ZnVuY3Rpb24oRixDKXt0aGlzLnhUaWNrcz1bXTt0aGlzLnhUaWNrU2l6ZT1D O3ZhciBFPXt9O2Zvcih2YXIgRD10aGlzLmluaXRQYWdlWDtEPj10aGlzLm1pblg7 RD1ELUMpe2lmKCFFW0RdKXt0aGlzLnhUaWNrc1t0aGlzLnhUaWNrcy5sZW5ndGhd PUQ7RVtEXT10cnVlO319Zm9yKEQ9dGhpcy5pbml0UGFnZVg7RDw9dGhpcy5tYXhY O0Q9RCtDKXtpZighRVtEXSl7dGhpcy54VGlja3NbdGhpcy54VGlja3MubGVuZ3Ro XT1EO0VbRF09dHJ1ZTt9fXRoaXMueFRpY2tzLnNvcnQodGhpcy5ERE0ubnVtZXJp Y1NvcnQpO30sc2V0WVRpY2tzOmZ1bmN0aW9uKEYsQyl7dGhpcy55VGlja3M9W107 dGhpcy55VGlja1NpemU9Qzt2YXIgRT17fTtmb3IodmFyIEQ9dGhpcy5pbml0UGFn ZVk7RD49dGhpcy5taW5ZO0Q9RC1DKXtpZighRVtEXSl7dGhpcy55VGlja3NbdGhp cy55VGlja3MubGVuZ3RoXT1EO0VbRF09dHJ1ZTt9fWZvcihEPXRoaXMuaW5pdFBh Z2VZO0Q8PXRoaXMubWF4WTtEPUQrQyl7aWYoIUVbRF0pe3RoaXMueVRpY2tzW3Ro aXMueVRpY2tzLmxlbmd0aF09RDtFW0RdPXRydWU7fX10aGlzLnlUaWNrcy5zb3J0 KHRoaXMuRERNLm51bWVyaWNTb3J0KTt9LHNldFhDb25zdHJhaW50OmZ1bmN0aW9u KEUsRCxDKXt0aGlzLmxlZnRDb25zdHJhaW50PXBhcnNlSW50KEUsMTApO3RoaXMu cmlnaHRDb25zdHJhaW50PXBhcnNlSW50KEQsMTApO3RoaXMubWluWD10aGlzLmlu aXRQYWdlWC10aGlzLmxlZnRDb25zdHJhaW50O3RoaXMubWF4WD10aGlzLmluaXRQ YWdlWCt0aGlzLnJpZ2h0Q29uc3RyYWludDtpZihDKXt0aGlzLnNldFhUaWNrcyh0 aGlzLmluaXRQYWdlWCxDKTt9dGhpcy5jb25zdHJhaW5YPXRydWU7fSxjbGVhckNv bnN0cmFpbnRzOmZ1bmN0aW9uKCl7dGhpcy5jb25zdHJhaW5YPWZhbHNlO3RoaXMu Y29uc3RyYWluWT1mYWxzZTt0aGlzLmNsZWFyVGlja3MoKTt9LGNsZWFyVGlja3M6 ZnVuY3Rpb24oKXt0aGlzLnhUaWNrcz1udWxsO3RoaXMueVRpY2tzPW51bGw7dGhp cy54VGlja1NpemU9MDt0aGlzLnlUaWNrU2l6ZT0wO30sc2V0WUNvbnN0cmFpbnQ6 ZnVuY3Rpb24oQyxFLEQpe3RoaXMudG9wQ29uc3RyYWludD1wYXJzZUludChDLDEw KTt0aGlzLmJvdHRvbUNvbnN0cmFpbnQ9cGFyc2VJbnQoRSwxMCk7dGhpcy5taW5Z PXRoaXMuaW5pdFBhZ2VZLXRoaXMudG9wQ29uc3RyYWludDt0aGlzLm1heFk9dGhp cy5pbml0UGFnZVkrdGhpcy5ib3R0b21Db25zdHJhaW50O2lmKEQpe3RoaXMuc2V0 WVRpY2tzKHRoaXMuaW5pdFBhZ2VZLEQpO310aGlzLmNvbnN0cmFpblk9dHJ1ZTt9 LHJlc2V0Q29uc3RyYWludHM6ZnVuY3Rpb24oKXtpZih0aGlzLmluaXRQYWdlWHx8 dGhpcy5pbml0UGFnZVg9PT0wKXt2YXIgRD0odGhpcy5tYWludGFpbk9mZnNldCk/ dGhpcy5sYXN0UGFnZVgtdGhpcy5pbml0UGFnZVg6MDt2YXIgQz0odGhpcy5tYWlu dGFpbk9mZnNldCk/dGhpcy5sYXN0UGFnZVktdGhpcy5pbml0UGFnZVk6MDt0aGlz LnNldEluaXRQb3NpdGlvbihELEMpO31lbHNle3RoaXMuc2V0SW5pdFBvc2l0aW9u KCk7fWlmKHRoaXMuY29uc3RyYWluWCl7dGhpcy5zZXRYQ29uc3RyYWludCh0aGlz LmxlZnRDb25zdHJhaW50LHRoaXMucmlnaHRDb25zdHJhaW50LHRoaXMueFRpY2tT aXplKTt9aWYodGhpcy5jb25zdHJhaW5ZKXt0aGlzLnNldFlDb25zdHJhaW50KHRo aXMudG9wQ29uc3RyYWludCx0aGlzLmJvdHRvbUNvbnN0cmFpbnQsdGhpcy55VGlj a1NpemUpO319LGdldFRpY2s6ZnVuY3Rpb24oSSxGKXtpZighRil7cmV0dXJuIEk7 fWVsc2V7aWYoRlswXT49SSl7cmV0dXJuIEZbMF07fWVsc2V7Zm9yKHZhciBEPTAs Qz1GLmxlbmd0aDtEPEM7KytEKXt2YXIgRT1EKzE7aWYoRltFXSYmRltFXT49SSl7 dmFyIEg9SS1GW0RdO3ZhciBHPUZbRV0tSTtyZXR1cm4oRz5IKT9GW0RdOkZbRV07 fX1yZXR1cm4gRltGLmxlbmd0aC0xXTt9fX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXty ZXR1cm4oIkRyYWdEcm9wICIrdGhpcy5pZCk7fX07WUFIT08uYXVnbWVudChZQUhP Ty51dGlsLkRyYWdEcm9wLFlBSE9PLnV0aWwuRXZlbnRQcm92aWRlcik7fSkoKTtZ QUhPTy51dGlsLkREPWZ1bmN0aW9uKEMsQSxCKXtpZihDKXt0aGlzLmluaXQoQyxB LEIpO319O1lBSE9PLmV4dGVuZChZQUhPTy51dGlsLkRELFlBSE9PLnV0aWwuRHJh Z0Ryb3Ase3Njcm9sbDp0cnVlLGF1dG9PZmZzZXQ6ZnVuY3Rpb24oQyxCKXt2YXIg QT1DLXRoaXMuc3RhcnRQYWdlWDt2YXIgRD1CLXRoaXMuc3RhcnRQYWdlWTt0aGlz LnNldERlbHRhKEEsRCk7fSxzZXREZWx0YTpmdW5jdGlvbihCLEEpe3RoaXMuZGVs dGFYPUI7dGhpcy5kZWx0YVk9QTt9LHNldERyYWdFbFBvczpmdW5jdGlvbihDLEIp e3ZhciBBPXRoaXMuZ2V0RHJhZ0VsKCk7dGhpcy5hbGlnbkVsV2l0aE1vdXNlKEEs QyxCKTt9LGFsaWduRWxXaXRoTW91c2U6ZnVuY3Rpb24oQyxHLEYpe3ZhciBFPXRo aXMuZ2V0VGFyZ2V0Q29vcmQoRyxGKTtpZighdGhpcy5kZWx0YVNldFhZKXt2YXIg SD1bRS54LEUueV07WUFIT08udXRpbC5Eb20uc2V0WFkoQyxIKTt2YXIgRD1wYXJz ZUludChZQUhPTy51dGlsLkRvbS5nZXRTdHlsZShDLCJsZWZ0IiksMTApO3ZhciBC PXBhcnNlSW50KFlBSE9PLnV0aWwuRG9tLmdldFN0eWxlKEMsInRvcCIpLDEwKTt0 aGlzLmRlbHRhU2V0WFk9W0QtRS54LEItRS55XTt9ZWxzZXtZQUhPTy51dGlsLkRv bS5zZXRTdHlsZShDLCJsZWZ0IiwoRS54K3RoaXMuZGVsdGFTZXRYWVswXSkrInB4 Iik7WUFIT08udXRpbC5Eb20uc2V0U3R5bGUoQywidG9wIiwoRS55K3RoaXMuZGVs dGFTZXRYWVsxXSkrInB4Iik7fXRoaXMuY2FjaGVQb3NpdGlvbihFLngsRS55KTt2 YXIgQT10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtBLmF1dG9TY3JvbGwuY2Fs bChBLEUueCxFLnksQy5vZmZzZXRIZWlnaHQsQy5vZmZzZXRXaWR0aCk7fSwwKTt9 LGNhY2hlUG9zaXRpb246ZnVuY3Rpb24oQixBKXtpZihCKXt0aGlzLmxhc3RQYWdl WD1CO3RoaXMubGFzdFBhZ2VZPUE7fWVsc2V7dmFyIEM9WUFIT08udXRpbC5Eb20u Z2V0WFkodGhpcy5nZXRFbCgpKTt0aGlzLmxhc3RQYWdlWD1DWzBdO3RoaXMubGFz dFBhZ2VZPUNbMV07fX0sYXV0b1Njcm9sbDpmdW5jdGlvbihKLEksRSxLKXtpZih0 aGlzLnNjcm9sbCl7dmFyIEw9dGhpcy5ERE0uZ2V0Q2xpZW50SGVpZ2h0KCk7dmFy IEI9dGhpcy5ERE0uZ2V0Q2xpZW50V2lkdGgoKTt2YXIgTj10aGlzLkRETS5nZXRT Y3JvbGxUb3AoKTt2YXIgRD10aGlzLkRETS5nZXRTY3JvbGxMZWZ0KCk7dmFyIEg9 RStJO3ZhciBNPUsrSjt2YXIgRz0oTCtOLUktdGhpcy5kZWx0YVkpO3ZhciBGPShC K0QtSi10aGlzLmRlbHRhWCk7dmFyIEM9NDA7dmFyIEE9KGRvY3VtZW50LmFsbCk/ ODA6MzA7aWYoSD5MJiZHPEMpe3dpbmRvdy5zY3JvbGxUbyhELE4rQSk7fWlmKEk8 TiYmTj4wJiZJLU48Qyl7d2luZG93LnNjcm9sbFRvKEQsTi1BKTt9aWYoTT5CJiZG PEMpe3dpbmRvdy5zY3JvbGxUbyhEK0EsTik7fWlmKEo8RCYmRD4wJiZKLUQ8Qyl7 d2luZG93LnNjcm9sbFRvKEQtQSxOKTt9fX0sYXBwbHlDb25maWc6ZnVuY3Rpb24o KXtZQUhPTy51dGlsLkRELnN1cGVyY2xhc3MuYXBwbHlDb25maWcuY2FsbCh0aGlz KTt0aGlzLnNjcm9sbD0odGhpcy5jb25maWcuc2Nyb2xsIT09ZmFsc2UpO30sYjRN b3VzZURvd246ZnVuY3Rpb24oQSl7dGhpcy5zZXRTdGFydFBvc2l0aW9uKCk7dGhp cy5hdXRvT2Zmc2V0KFlBSE9PLnV0aWwuRXZlbnQuZ2V0UGFnZVgoQSksWUFIT08u dXRpbC5FdmVudC5nZXRQYWdlWShBKSk7fSxiNERyYWc6ZnVuY3Rpb24oQSl7dGhp cy5zZXREcmFnRWxQb3MoWUFIT08udXRpbC5FdmVudC5nZXRQYWdlWChBKSxZQUhP Ty51dGlsLkV2ZW50LmdldFBhZ2VZKEEpKTt9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7 cmV0dXJuKCJERCAiK3RoaXMuaWQpO319KTtZQUhPTy51dGlsLkREUHJveHk9ZnVu Y3Rpb24oQyxBLEIpe2lmKEMpe3RoaXMuaW5pdChDLEEsQik7dGhpcy5pbml0RnJh bWUoKTt9fTtZQUhPTy51dGlsLkREUHJveHkuZHJhZ0VsSWQ9InlnZGRmZGl2IjtZ QUhPTy5leHRlbmQoWUFIT08udXRpbC5ERFByb3h5LFlBSE9PLnV0aWwuREQse3Jl c2l6ZUZyYW1lOnRydWUsY2VudGVyRnJhbWU6ZmFsc2UsY3JlYXRlRnJhbWU6ZnVu Y3Rpb24oKXt2YXIgQj10aGlzLEE9ZG9jdW1lbnQuYm9keTtpZighQXx8IUEuZmly c3RDaGlsZCl7c2V0VGltZW91dChmdW5jdGlvbigpe0IuY3JlYXRlRnJhbWUoKTt9 LDUwKTtyZXR1cm47fXZhciBGPXRoaXMuZ2V0RHJhZ0VsKCksRT1ZQUhPTy51dGls LkRvbTtpZighRil7Rj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtGLmlk PXRoaXMuZHJhZ0VsSWQ7dmFyIEQ9Ri5zdHlsZTtELnBvc2l0aW9uPSJhYnNvbHV0 ZSI7RC52aXNpYmlsaXR5PSJoaWRkZW4iO0QuY3Vyc29yPSJtb3ZlIjtELmJvcmRl cj0iMnB4IHNvbGlkICNhYWEiO0QuekluZGV4PTk5OTtELmhlaWdodD0iMjVweCI7 RC53aWR0aD0iMjVweCI7dmFyIEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2 Iik7RS5zZXRTdHlsZShDLCJoZWlnaHQiLCIxMDAlIik7RS5zZXRTdHlsZShDLCJ3 aWR0aCIsIjEwMCUiKTtFLnNldFN0eWxlKEMsImJhY2tncm91bmQtY29sb3IiLCIj Y2NjIik7RS5zZXRTdHlsZShDLCJvcGFjaXR5IiwiMCIpO0YuYXBwZW5kQ2hpbGQo Qyk7QS5pbnNlcnRCZWZvcmUoRixBLmZpcnN0Q2hpbGQpO319LGluaXRGcmFtZTpm dW5jdGlvbigpe3RoaXMuY3JlYXRlRnJhbWUoKTt9LGFwcGx5Q29uZmlnOmZ1bmN0 aW9uKCl7WUFIT08udXRpbC5ERFByb3h5LnN1cGVyY2xhc3MuYXBwbHlDb25maWcu Y2FsbCh0aGlzKTt0aGlzLnJlc2l6ZUZyYW1lPSh0aGlzLmNvbmZpZy5yZXNpemVG cmFtZSE9PWZhbHNlKTt0aGlzLmNlbnRlckZyYW1lPSh0aGlzLmNvbmZpZy5jZW50 ZXJGcmFtZSk7dGhpcy5zZXREcmFnRWxJZCh0aGlzLmNvbmZpZy5kcmFnRWxJZHx8 WUFIT08udXRpbC5ERFByb3h5LmRyYWdFbElkKTt9LHNob3dGcmFtZTpmdW5jdGlv bihFLEQpe3ZhciBDPXRoaXMuZ2V0RWwoKTt2YXIgQT10aGlzLmdldERyYWdFbCgp O3ZhciBCPUEuc3R5bGU7dGhpcy5fcmVzaXplUHJveHkoKTtpZih0aGlzLmNlbnRl ckZyYW1lKXt0aGlzLnNldERlbHRhKE1hdGgucm91bmQocGFyc2VJbnQoQi53aWR0 aCwxMCkvMiksTWF0aC5yb3VuZChwYXJzZUludChCLmhlaWdodCwxMCkvMikpO310 aGlzLnNldERyYWdFbFBvcyhFLEQpO1lBSE9PLnV0aWwuRG9tLnNldFN0eWxlKEEs InZpc2liaWxpdHkiLCJ2aXNpYmxlIik7fSxfcmVzaXplUHJveHk6ZnVuY3Rpb24o KXtpZih0aGlzLnJlc2l6ZUZyYW1lKXt2YXIgSD1ZQUhPTy51dGlsLkRvbTt2YXIg Qj10aGlzLmdldEVsKCk7dmFyIEM9dGhpcy5nZXREcmFnRWwoKTt2YXIgRz1wYXJz ZUludChILmdldFN0eWxlKEMsImJvcmRlclRvcFdpZHRoIiksMTApO3ZhciBJPXBh cnNlSW50KEguZ2V0U3R5bGUoQywiYm9yZGVyUmlnaHRXaWR0aCIpLDEwKTt2YXIg Rj1wYXJzZUludChILmdldFN0eWxlKEMsImJvcmRlckJvdHRvbVdpZHRoIiksMTAp O3ZhciBEPXBhcnNlSW50KEguZ2V0U3R5bGUoQywiYm9yZGVyTGVmdFdpZHRoIiks MTApO2lmKGlzTmFOKEcpKXtHPTA7fWlmKGlzTmFOKEkpKXtJPTA7fWlmKGlzTmFO KEYpKXtGPTA7fWlmKGlzTmFOKEQpKXtEPTA7fXZhciBFPU1hdGgubWF4KDAsQi5v ZmZzZXRXaWR0aC1JLUQpO3ZhciBBPU1hdGgubWF4KDAsQi5vZmZzZXRIZWlnaHQt Ry1GKTtILnNldFN0eWxlKEMsIndpZHRoIixFKyJweCIpO0guc2V0U3R5bGUoQywi aGVpZ2h0IixBKyJweCIpO319LGI0TW91c2VEb3duOmZ1bmN0aW9uKEIpe3RoaXMu c2V0U3RhcnRQb3NpdGlvbigpO3ZhciBBPVlBSE9PLnV0aWwuRXZlbnQuZ2V0UGFn ZVgoQik7dmFyIEM9WUFIT08udXRpbC5FdmVudC5nZXRQYWdlWShCKTt0aGlzLmF1 dG9PZmZzZXQoQSxDKTt9LGI0U3RhcnREcmFnOmZ1bmN0aW9uKEEsQil7dGhpcy5z aG93RnJhbWUoQSxCKTt9LGI0RW5kRHJhZzpmdW5jdGlvbihBKXtZQUhPTy51dGls LkRvbS5zZXRTdHlsZSh0aGlzLmdldERyYWdFbCgpLCJ2aXNpYmlsaXR5IiwiaGlk ZGVuIik7fSxlbmREcmFnOmZ1bmN0aW9uKEQpe3ZhciBDPVlBSE9PLnV0aWwuRG9t O3ZhciBCPXRoaXMuZ2V0RWwoKTt2YXIgQT10aGlzLmdldERyYWdFbCgpO0Muc2V0 U3R5bGUoQSwidmlzaWJpbGl0eSIsIiIpO0Muc2V0U3R5bGUoQiwidmlzaWJpbGl0 eSIsImhpZGRlbiIpO1lBSE9PLnV0aWwuRERNLm1vdmVUb0VsKEIsQSk7Qy5zZXRT dHlsZShBLCJ2aXNpYmlsaXR5IiwiaGlkZGVuIik7Qy5zZXRTdHlsZShCLCJ2aXNp YmlsaXR5IiwiIik7fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybigiRERQcm94 eSAiK3RoaXMuaWQpO319KTtZQUhPTy51dGlsLkREVGFyZ2V0PWZ1bmN0aW9uKEMs QSxCKXtpZihDKXt0aGlzLmluaXRUYXJnZXQoQyxBLEIpO319O1lBSE9PLmV4dGVu ZChZQUhPTy51dGlsLkREVGFyZ2V0LFlBSE9PLnV0aWwuRHJhZ0Ryb3Ase3RvU3Ry aW5nOmZ1bmN0aW9uKCl7cmV0dXJuKCJERFRhcmdldCAiK3RoaXMuaWQpO319KTtZ QUhPTy5yZWdpc3RlcigiZHJhZ2Ryb3AiLFlBSE9PLnV0aWwuRHJhZ0Ryb3BNZ3Is e3ZlcnNpb246IjIuNy4wIixidWlsZDoiMTc5OSJ9KTtZQUhPTy5uYW1lc3BhY2Uo IlVwZGF0ZXMiKS5EaXNjbG9zdXJlPWZ1bmN0aW9uKCl7dmFyIGk9Ii91cGRhdGVz LXN0YXR1cy8iO3ZhciBmPTEwMDt2YXIgQT1mdW5jdGlvbihDLEIpe3ZhciBEPWRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoQyk7Zm9yKHZhciBkIGluIEIpe2lmKGQ9PSJp bm5lckhUTUwiKXtELmlubmVySFRNTD1CW2RdfWVsc2V7aWYoQltkXSYmWUFIT08u bGFuZy5oYXNPd25Qcm9wZXJ0eShCLGQpKXtELnNldEF0dHJpYnV0ZShkLEJbZF0p fX19cmV0dXJuIER9O3ZhciBwPWZ1bmN0aW9uKEMsZCl7dmFyIEI9ZG9jdW1lbnQu Z2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTt2YXIgRD1BKEMsZCk7Qi5h cHBlbmRDaGlsZChEKTtyZXR1cm4gRH07dmFyIGc9ZnVuY3Rpb24oZCxCKXtyZXR1 cm4gZC5pbmRleE9mKCJodHRwIik9PT0wfHxCPT09ZmFsc2U/cCgibGluayIse3R5 cGU6InRleHQvY3NzIixjaGFyc2V0OiJ1dGYtOCIscmVsOiJzdHlsZXNoZWV0Iixo cmVmOmR9KTpwKCJzdHlsZSIse3R5cGU6InRleHQvY3NzIixpbm5lckhUTUw6ZH0p fTt2YXIgdD1mdW5jdGlvbihkLEIpe3JldHVybiBkLmluZGV4T2YoImh0dHAiKT09 PTB8fEI9PT1mYWxzZT9wKCJzY3JpcHQiLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQi LGNoYXJzZXQ6InV0Zi04IixzcmM6ZH0pOnAoInNjcmlwdCIse3R5cGU6InRleHQv amF2YXNjcmlwdCIsY2hhcnNldDoidXRmLTgiLGlubmVySFRNTDpkfSl9O3ZhciB2 PWZ1bmN0aW9uKEIsZCl7dmFyIEM9Qi5nZXRFbGVtZW50c0J5VGFnTmFtZShkKTtp ZihDLmxlbmd0aCYmQ1swXS5maXJzdENoaWxkKXtDPUNbMF0uZmlyc3RDaGlsZC5u b2RlVmFsdWV9ZWxzZXtDPWZhbHNlfXJldHVybiBDfTt2YXIgeDt2YXIgbz1mdW5j dGlvbigpe3JldHVybiB4fTt2YXIgcj1mdW5jdGlvbigpe2lmKHgpe3guZGVzdHJv eSgpO3g9bnVsbH19O3ZhciBlPWZ1bmN0aW9uKEMsZCl7dmFyIEI9WUFIT08udXRp bC5Eb20sRD1oKCk7Qi5zZXRTdHlsZShELCJkaXNwbGF5IiwiYmxvY2siKTtCLnNl dFN0eWxlKEQsImxlZnQiLGRbMF0rInB4Iik7Qi5zZXRTdHlsZShELCJ0b3AiLGRb MV0rInB4Iik7Qi5zZXRTdHlsZShELCJ6SW5kZXgiLChDLmNmZy5nZXRQcm9wZXJ0 eSgiekluZGV4IikrMikpfTt2YXIgcT1mdW5jdGlvbihVKXt2YXIgVj1mYWxzZSxU PSc8ZGl2IGNsYXNzPSJkaXNjLW92LW1zZyI+JytVLm1lc3NhZ2UrJzwvZGl2PiA8 ZGl2IGNsYXNzPSJkaXNjLW92LW1uZyI+PGEgaHJlZj0iJytVLm1hbmFnZVVSTCsn Ij4nK1UubWFuYWdlVHh0KyI8L2E+PC9kaXY+IixEPVUuc3luZGljYXRpb24sWD0i IixPPWZhbHNlLEU9IiI7dmFyIE09WUFIT08udXRpbC5FdmVudCxOPVlBSE9PLnV0 aWwuRG9tLEM9WUFIT08ud2lkZ2V0Lk92ZXJsYXksTD1bXTtmb3IodmFyIFE9MCxQ PUQubGVuZ3RoLEo9MDtRPFA7USsrKXt2YXIgVz1EW1FdLEs9Im92X2Rpc2NfYmNz dF9pbWdfIitXLmRlc3RpbmF0aW9uO2lmKChXLnN0YXR1cz09PSJFTkFCTEVEIikm JihXLmRlc3RpbmF0aW9uIT1mfHxXLmNvbnN0cmFpbnQhPSJQUklWQVRFIikpe1Y9 dHJ1ZTt2YXIgQj0ib3ZfZGlzY190b29sdGlwXyIrSzt2YXIgZD1uZXcgQyhCLHt2 aXNpYmxlOmZhbHNlLG1vZGFsOnRydWV9KTtkLnNldEJvZHkoJzxkaXYgY2xhc3M9 ImRpc2MtdG9vbHRpcCI+PGRpdj4nK1cuaWNvblR4dCsiPC9kaXY+PC9kaXY+Iik7 ZC5yZW5kZXIoZG9jdW1lbnQuYm9keSk7TFtKXT1kO0orKzt2YXIgUzt2YXIgRj0o ZnVuY3Rpb24oKXt2YXIgWT1kO3ZhciBaPUs7cmV0dXJuIGZ1bmN0aW9uKCl7aWYo Uyl7Uy5jYW5jZWwoKX1mb3IodmFyIGFkPTAsYWI9TC5sZW5ndGg7YWQ8YWI7YWQr Kyl7aWYodHlwZW9mKExbYWRdKSE9PSJ1bmRlZmluZWQiKXt2YXIgYWY9TFthZF07 aWYoWSE9YWYpe2FmLmhpZGUoKX19fXZhciBhZT1OLmdldChaKSxhYz1OLmdldFJl Z2lvbihhZSksYWE9WyhhYy5sZWZ0LTIwKSwoYWMuYm90dG9tKzgpXTtOLnNldFN0 eWxlKFkuZWxlbWVudCwibGVmdCIsYWFbMF0rInB4Iik7Ti5zZXRTdHlsZShZLmVs ZW1lbnQsInRvcCIsYWFbMV0rInB4Iik7WS5jZmcuc2V0UHJvcGVydHkoInpJbmRl eCIsKE4uZ2V0U3R5bGUoInl1cC1kaWFsb2dfYyIsInpJbmRleCIpKzIpKTtlKFks W2FjLmxlZnQsYWMuYm90dG9tXSk7WS5zaG93KCl9fSkoKTtNLmFkZExpc3RlbmVy KEssIm1vdXNlb3ZlciIsRik7TS5hZGRMaXN0ZW5lcihCLCJtb3VzZW92ZXIiLEYp O3ZhciBIPShmdW5jdGlvbigpe3ZhciBZPWQ7cmV0dXJuIGZ1bmN0aW9uKCl7Uz1Z QUhPTy5sYW5nLmxhdGVyKDEsWSxmdW5jdGlvbigpe04uc2V0U3R5bGUoaCgpLCJk aXNwbGF5Iiwibm9uZSIpO1kuaGlkZSgpfSl9fSkoKTtNLmFkZExpc3RlbmVyKEss Im1vdXNlb3V0IixIKTtNLmFkZExpc3RlbmVyKEIsIm1vdXNlb3V0IixIKTt2YXIg Uj0nPGltZyBzcmM9IicrVy5pY29uVVJMKyciIGlkPSInK0srJyIgYWx0PSInK1cu aWNvblR4dCsnIiAvPic7WCs9Un1lbHNle2lmKFcuc3RhdHVzPT09IlVOTElOS0VE Iil7Tz10cnVlO3ZhciBJPSJvdl9kaXNjX3Vwc2VsbF9saW5rXyIrVy5kZXN0aW5h dGlvbixSPSc8ZGl2IGlkPSInK0srJyI+IDxpbWcgc3JjPSInK1cuaWNvblVSTCsn IiBhbHQ9IicrVy5pY29uVHh0KyciIC8+PGEgaHJlZj0iIyIgaWQ9IicrSSsnIj4n K1cubGlua1R4dCsiPC9hPjwvZGl2PiI7RSs9UjtNLmFkZExpc3RlbmVyKEksImNs aWNrIixmdW5jdGlvbigpe3ZhciBZPVcubGlua1VSTDtyZXR1cm4gZnVuY3Rpb24o Wil7dSgpO1lBSE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIlBPU1QiLGks e3N1Y2Nlc3M6ayxhcmd1bWVudDpVfSwiaW5pdFJlc3RBcGlVcmw9IitZKyImZGVz dElkPSIrVy5kZXN0aW5hdGlvbisiJmxhbmc9IitVLmxhbmcrIiYiK1UuY3J1bWJO YW1lKyI9IitVLmNydW1iKX19KCkpfX19dmFyIEc9IiI7aWYoVil7dmFyIFI9Jzxk aXYgY2xhc3M9ImViY3N0cnNfYyI+JytUKyc8ZGl2IGNsYXNzPSJlYmNzdHJzIj4n K1grIjwvZGl2PiA8L2Rpdj4iO0crPVJ9aWYoTyl7dmFyIFI9JzxkaXYgY2xhc3M9 InVuYmNzdHJzX2MiPicrRSsiPC9kaXY+IjtHKz1SfXJldHVybiBHfTt2YXIgeT1m dW5jdGlvbihCKXtpZighWUFIT08ubGFuZy5pc09iamVjdChCKXx8IUIuc291cmNl fHwhQi5jb250YWluZXJ8fCghQi5yZXNwb25zZSYmIUIudHlwZSkpe3JldHVybiBm YWxzZX12YXIgRj1mdW5jdGlvbihMKXtyKCk7aWYoIUwmJkIucmVzcG9uc2Upe3Zh ciBOPUIucmVzcG9uc2V9ZWxzZXt2YXIgTj1ZQUhPTy5sYW5nLkpTT04ucGFyc2Uo TC5yZXNwb25zZVRleHQpfXZhciBNPU4uZGlzY2xvc3VyZXx8ZmFsc2U7aWYoIVlB SE9PLmxhbmcuaXNTdHJpbmcoTSl8fChNLnRvTG93ZXJDYXNlKCkhPSJzaG93IiYm TS50b0xvd2VyQ2FzZSgpIT0ic2hvd2NoZWNrZWQiKSl7cmV0dXJuIDB9aWYoTi5n bG9iYWxfb3B0b3V0PT0iMSIpe3JldHVybn12YXIgRz1OLnN5bmRpY2F0aW9uLEk9 ZmFsc2UsVDtmb3IodmFyIE89MCxLPUcubGVuZ3RoO088SztPKyspe1Q9R1tPXTtp ZigoVC5zdGF0dXM9PT0iRU5BQkxFRCIpJiYoVC5kZXN0aW5hdGlvbiE9Znx8VC5j b25zdHJhaW50IT0iUFJJVkFURSIpKXtJPXRydWV9fWlmKCFJKXtyZXR1cm59aWYo Ti5zdHlsZSl7ZyhOLnN0eWxlKX12YXIgSj1ZQUhPTy51dGlsLkRvbTtKLmFkZENs YXNzKGRvY3VtZW50LmJvZHksInl1aS1za2luLXNhbSIpO3ZhciBIPWZ1bmN0aW9u KCl7dGhpcy5zdWJtaXQoKX07eD1uZXcgWUFIT08ud2lkZ2V0LlNpbXBsZURpYWxv ZygieXVwLWRpYWxvZyIse3dpZHRoOiI0MDBweCIsdW5kZXJsYXk6InNoYWRvdyIs bW9kYWw6dHJ1ZSxmaXhlZGNlbnRlcjp0cnVlLGNsb3NlOnRydWUscG9zdG1ldGhv ZDoiYXN5bmMiLHZpc2libGU6ZmFsc2UsZHJhZ2dhYmxlOmZhbHNlLG1vbml0b3Jy ZXNpemU6ZmFsc2UsY29uc3RyYWludG92aWV3cG9ydDp0cnVlLHpJbmRleDoyMDAw MDAwMDAxLGJ1dHRvbnM6W3t0ZXh0Ok4uYnV0dG9uLGhhbmRsZXI6SCxpc0RlZmF1 bHQ6ZmFsc2V9XX0pO2lmKEIuZXZlbnRzKXtmb3IodmFyIFIgaW4gQi5ldmVudHMp e2lmKHhbUl0mJnhbUl0uc3Vic2NyaWJlKXt2YXIgUz1CLmV2ZW50c1tSXTt4W1Jd LnN1YnNjcmliZShTLmZuLFMub2JqfHx4LFMuc2NvcGUpfX19eC5zZXRIZWFkZXIo Ti5sb2NfbG9jYWxpemVkTmFtZSk7dmFyIFA9IiI7dmFyIFY9JzxkaXYgY2xhc3M9 InJlc3VsdCI+JytOLnJlc3VsdCsiPC9kaXY+IjtQKz1WO1ArPXEoTik7eC5zZXRC b2R5KFApO3gucmVuZGVyKEIuY29udGFpbmVyKTt2YXIgUT1BKCJmb3JtIix7aWQ6 Inl1cC1zaG93IixhY3Rpb246aSxtZXRob2Q6IlBPU1QifSk7dmFyIFU9KE0udG9M b3dlckNhc2UoKT09InNob3djaGVja2VkIik/JyJjaGVja2VkPWNoZWNrZWQiJzoi IjtRLmlubmVySFRNTD1bJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9Inl1cF9v dl9kaXNjX29wdGlvbiIgJytVLCcgbmFtZT0ieXVwX292X2Rpc2Nfb3B0aW9uIiA+ JywnPGxhYmVsIGZvcj0ieXVwX292X2Rpc2Nfb3B0aW9uIj4nK04ucHJvbXB0KyI8 L2xhYmVsPiIsJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNvdXJjZSIgdmFs dWU9IicrQi5zb3VyY2UrJyI+JywnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0i JytOLmNydW1iX25hbWUrJyIgdmFsdWU9IicrTi5jcnVtYisnIj4nLCc8aW5wdXQg dHlwZT0iaGlkZGVuIiBuYW1lPSJvdl9kaXNjX2Zvcm0iIHZhbHVlPSJzdWJtaXRG b3JtIj4nXS5qb2luKCIiKTt4LmFwcGVuZFRvQm9keShRKTt4LmZvcm0ucGFyZW50 Tm9kZS5yZXBsYWNlQ2hpbGQoUSx4LmZvcm0pO3guZm9ybT1RO2lmKE0udG9Mb3dl ckNhc2UoKT09InNob3djaGVja2VkIil7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo Inl1cF9vdl9kaXNjX29wdGlvbiIpLmNoZWNrZWQ9dHJ1ZX14LnNob3coKTtpZihO LnNjcmlwdCl7dChOLnNjcmlwdCl9fTt2YXIgRT1mdW5jdGlvbigpe1lBSE9PLnV0 aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIlBPU1QiLGkse3N1Y2Nlc3M6Rn0sInNv dXJjZT0iK0Iuc291cmNlKyImdHlwZT0iK0IudHlwZSsiJmxhbmc9IisoQi5sYW5n fHwiZW4tVVMiKSsiJmdldF9kaXNjPXRydWUmZm9ybWF0PXhtbCIpfTt2YXIgRD1C Lnl1aUJhc2VQYXRofHwieXVpLzIuNi4wL2J1aWxkLyIsZD0iaHR0cDovL2wueWlt Zy5jb20vZC9jb21ibz8iO3ZhciBDPWZ1bmN0aW9uKEcpe3ZhciBJPVlBSE9PLmVu di5tb2R1bGVzLmNvbm5lY3Rpb24/dHJ1ZTpmYWxzZSxLPVlBSE9PLmVudi5tb2R1 bGVzLmpzb24/dHJ1ZTpmYWxzZSxKPVlBSE9PLmVudi5tb2R1bGVzLmNvbnRhaW5l cj90cnVlOmZhbHNlO2lmKEkmJkope2lmKEIucmVzcG9uc2Upe0YoKX1lbHNle0Uo KX19ZWxzZXtpZighRyl7aWYoIUope2coZCtEKyJjb250YWluZXIvYXNzZXRzL3Nr aW5zL3NhbS9jb250YWluZXIuY3NzIil9dmFyIEg9IiI7SCs9Sz8iIjooSD8iJiI6 IiIpK0QrImpzb24vanNvbi1taW4uanMiO0grPUk/IiI6KEg/IiYiOiIiKStEKyJj b25uZWN0aW9uL2Nvbm5lY3Rpb24tbWluLmpzIjtIKz1KPyIiOihIPyImIjoiIikr RCsiY29udGFpbmVyL2NvbnRhaW5lci1taW4uanMiO3QoZCtIKX1zZXRUaW1lb3V0 KGZ1bmN0aW9uKCl7Qyh0cnVlKX0sMTAwKX19O2lmKHR5cGVvZiBCLnJlc29sdmVE ZXBlbmRlbmNpZXM9PT0idW5kZWZpbmVkInx8Qi5yZXNvbHZlRGVwZW5kZW5jaWVz KXtDKCl9fTt2YXIgbCxuPXsiNDUwIjoiaHR0cDovL2wueWltZy5jb20va3gvZHMv aHRtbC9lcnJvcl80NTAuaHRtbCIsIjQyNCI6Imh0dHA6Ly9sLnlpbWcuY29tL2t4 L2RzL2h0bWwvZXJyb3JfNDI0Lmh0bWwifTt2YXIgdT1mdW5jdGlvbigpe2w9d2lu ZG93Lm9wZW4oIiIsImRpc2Nsb3N1cmVzX2F1dGhfZmxvdyIsIm1vZGFsPXllcyx3 aWR0aD04MDQsaGVpZ2h0PTUwNyIpfTt2YXIgdz1mdW5jdGlvbihCLEUpe3ZhciBE PVlBSE9PLmxhbmcuSlNPTi5wYXJzZShCLnJlc3BvbnNlVGV4dCksZD1CLmFyZ3Vt ZW50O2lmKEQuZXJyb3JDb2RlKXtpZihuW0QuZXJyb3JDb2RlXSl7bC5sb2NhdGlv bj1uW0QuZXJyb3JDb2RlXSsiP2xhbmc9IitkLmxhbmd9ZWxzZXtsLmxvY2F0aW9u PW5bIjQyNCJdKyI/bGFuZz0iK2QubGFuZ319ZWxzZXtpZihELnJlc3VsdHMmJkQu cmVzdWx0cy5hdXRob3JpemVVUkwpe3ZhciBHPUQucmVzdWx0cy5hdXRob3JpemVV Ukw7bC5sb2NhdGlvbj1HO3ZhciBDPTUwMDt2YXIgRj1ZQUhPTy5sYW5nLmxhdGVy KEMsbnVsbCxmdW5jdGlvbigpe2lmKGwuY2xvc2VkKXtGLmNhbmNlbCgpO1lBSE9P LmxhbmcubGF0ZXIoMjUwLHRoaXMsYS51cGRhdGVBbGxJbnN0YW5jZXMpO2EuZXhl Y3V0ZVBvc3RMaW5rQ2FsbGJhY2tzKCl9fSxudWxsLHRydWUpfWVsc2V7bC5sb2Nh dGlvbj1uWyI0MjQiXSsiP2xhbmc9IitkLmxhbmd9fWwuZm9jdXMoKX07dmFyIGs9 ZnVuY3Rpb24oZCl7dyhkLHRydWUpfTt2YXIgaD1mdW5jdGlvbigpe3JldHVybiBZ QUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJkaXNjLXRvb2x0 aXAta25vYiIsImRpdiIpWzBdfTt2YXIgaj1mdW5jdGlvbihHLEgpe3ZhciBDPVlB SE9PLnV0aWwuRXZlbnQsRD1ZQUhPTy51dGlsLkRvbSxkPVlBSE9PLndpZGdldC5P dmVybGF5LEU9WUFIT08udXRpbC5jb25uZWN0LEo9Ry5pbmxpbmVQZXJtSW5mbzt2 YXIgST1uZXcgZChKLm92bHlJZCx7Y29udGV4dDpbRy5pbWFnZUlkLCJ0bCIsImJs Il19KTtJLnJlbmRlcihKLmNvbklkKTt2YXIgRj1mdW5jdGlvbihLKXtELnJlbW92 ZUNsYXNzKEoub3ZseUlkLCJkaXNjLWhpZGUiKTtJLnNob3coKTtJLmFsaWduKCJ0 bCIsImJsIik7Qy5hZGRMaXN0ZW5lcihkb2N1bWVudCwiY2xpY2siLEIpO0Muc3Rv cEV2ZW50KEspfTt2YXIgQj1mdW5jdGlvbigpe0kuaGlkZSgpO0MucmVtb3ZlTGlz dGVuZXIoZG9jdW1lbnQsImNsaWNrIixCKX07Qy5hZGRMaXN0ZW5lcihKLmFjdElk LCJjbGljayIsRik7Qy5hZGRMaXN0ZW5lcihKLmV2SWQsImNsaWNrIixmdW5jdGlv bigpe1lBSE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIlBPU1QiLGkse3N1 Y2Nlc3M6ZnVuY3Rpb24oKXtELmFkZENsYXNzKEouZXZJZCwic2VsZWN0ZWQiKTtE LnJlbW92ZUNsYXNzKEouY29ubklkLCJzZWxlY3RlZCIpO0IoKTtELmdldChHLmlu cHV0SWQpLmNoZWNrZWQ9dHJ1ZTthLnN5bmNPdGhlckluc3RhbmNlcyhILmlkKX19 LCJzb3VyY2U9IitILnNvdXJjZSsiJnR5cGU9IitILnR5cGUrIiZtb2Rfc3luZF9j b25zPVBVQiZkZXN0PTEwMCYiK0guY3J1bWJOYW1lKyI9IitILmNydW1iKX0pO0Mu YWRkTGlzdGVuZXIoSi5jb25uSWQsImNsaWNrIixmdW5jdGlvbigpe1lBSE9PLnV0 aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIlBPU1QiLGkse3N1Y2Nlc3M6ZnVuY3Rp b24oKXtELmFkZENsYXNzKEouY29ubklkLCJzZWxlY3RlZCIpO0QucmVtb3ZlQ2xh c3MoSi5ldklkLCJzZWxlY3RlZCIpO0IoKTtELmdldChHLmlucHV0SWQpLmNoZWNr ZWQ9dHJ1ZTthLnN5bmNPdGhlckluc3RhbmNlcyhILmlkKX19LCJzb3VyY2U9IitI LnNvdXJjZSsiJnR5cGU9IitILnR5cGUrIiZtb2Rfc3luZF9jb25zPUNYTiZkZXN0 PTEwMCYiK0guY3J1bWJOYW1lKyI9IitILmNydW1iKX0pfTt2YXIgcz1mdW5jdGlv bihEKXt2YXIgST1ELEU9WUFIT08udXRpbC5FdmVudCxGPVlBSE9PLnV0aWwuRG9t LEM9WUFIT08ud2lkZ2V0Lk92ZXJsYXksSz1JLmRlc3RpbmF0aW9ucyxPPVtdO2Zv cih2YXIgSD0wLEc9Sy5sZW5ndGg7SDxHO0grKyl7dmFyIEw9S1tIXTt2YXIgQj0i ZGlzY190b29sdGlwXyIrTC5pbWFnZUlkLEo9bmV3IEMoQix7dmlzaWJsZTpmYWxz ZX0pO0ouc2V0Qm9keSgnPGRpdiBjbGFzcz0iZGlzYy10b29sdGlwIj48ZGl2Picr TC50dFR4dCsiPC9kaXY+PC9kaXY+Iik7Si5yZW5kZXIoZG9jdW1lbnQuYm9keSk7 T1tIXT1KO3ZhciBOO3ZhciBQPShmdW5jdGlvbigpe3ZhciBkPUo7dmFyIFE9TC5p bWFnZUlkO3JldHVybiBmdW5jdGlvbigpe2lmKE4pe04uY2FuY2VsKCl9Zm9yKHZh ciBVPTAsUz1PLmxlbmd0aDtVPFM7VSsrKXt2YXIgVz1PW1VdO2lmKGQhPVcpe1cu aGlkZSgpfX12YXIgVj1GLmdldChRKSxUPUYuZ2V0UmVnaW9uKFYpLFI9WyhULmxl ZnQtMjApLChULmJvdHRvbSs4KV07Ri5zZXRTdHlsZShkLmVsZW1lbnQsImxlZnQi LFJbMF0rInB4Iik7Ri5zZXRTdHlsZShkLmVsZW1lbnQsInRvcCIsUlsxXSsicHgi KTtlKGQsW1QubGVmdCxULmJvdHRvbV0pO2Quc2hvdygpfX0pKCk7RS5hZGRMaXN0 ZW5lcihMLmltYWdlSWQsIm1vdXNlb3ZlciIsUCk7RS5hZGRMaXN0ZW5lcihCLCJt b3VzZW92ZXIiLFApO3ZhciBNPShmdW5jdGlvbigpe3ZhciBkPUo7cmV0dXJuIGZ1 bmN0aW9uKCl7Tj1ZQUhPTy5sYW5nLmxhdGVyKDEsZCxmdW5jdGlvbigpe0Yuc2V0 U3R5bGUoaCgpLCJkaXNwbGF5Iiwibm9uZSIpO2QuaGlkZSgpfSl9fSkoKTtFLmFk ZExpc3RlbmVyKEwuaW1hZ2VJZCwibW91c2VvdXQiLE0pO0UuYWRkTGlzdGVuZXIo QiwibW91c2VvdXQiLE0pO2lmKEwuc3RhdGU9PT0iRU5BQkxFRCJ8fEwuc3RhdGU9 PT0iRElTQUJMRUQiKXtFLmFkZExpc3RlbmVyKEwuaW5wdXRJZCwiY2xpY2siLGZ1 bmN0aW9uKCl7dmFyIGQ9TDtyZXR1cm4gZnVuY3Rpb24oVil7dmFyIFM9ZnVuY3Rp b24oKXthLnN5bmNPdGhlckluc3RhbmNlcyhJLmlkKX07aWYoZC5kZXN0PT1mKXt2 YXIgVD10aGlzLFU9VC5jaGVja2VkPyJQVUIiOiJQUklWQVRFIixSPWQuaW5saW5l UGVybUluZm87Uz1mdW5jdGlvbigpe2lmKFQuY2hlY2tlZCl7Ri5hZGRDbGFzcyhS LmV2SWQsInNlbGVjdGVkIik7Ri5yZW1vdmVDbGFzcyhSLmNvbm5JZCwic2VsZWN0 ZWQiKX1lbHNle0YucmVtb3ZlQ2xhc3MoUi5ldklkLCJzZWxlY3RlZCIpO0YucmVt b3ZlQ2xhc3MoUi5jb25uSWQsInNlbGVjdGVkIil9YS5zeW5jT3RoZXJJbnN0YW5j ZXMoSS5pZCl9O1lBSE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIlBPU1Qi LGkse3N1Y2Nlc3M6U30sInNvdXJjZT0iK0kuc291cmNlKyImdHlwZT0iK0kudHlw ZSsiJm1vZF9zeW5kX2NvbnM9IitVKyImZGVzdD0iK2QuZGVzdCsiJiIrSS5jcnVt Yk5hbWUrIj0iK0kuY3J1bWIpfWVsc2V7dmFyIFE9dGhpcy5jaGVja2VkPyJFTkFC TEVEIjoiRElTQUJMRUQiO1lBSE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3Qo IlBPU1QiLGkse3N1Y2Nlc3M6U30sInNvdXJjZT0iK0kuc291cmNlKyImdHlwZT0i K0kudHlwZSsiJm1vZF9zeW5kX3N0YXQ9IitRKyImZGVzdD0iK2QuZGVzdCsiJiIr SS5jcnVtYk5hbWUrIj0iK0kuY3J1bWIpfX19KCkpfWlmKEwuc3RhdGU9PT0iVU5M SU5LRUQiKXtFLmFkZExpc3RlbmVyKEwudXBzZWxsTGlua0lkLCJjbGljayIsZnVu Y3Rpb24oKXt2YXIgZD1MLmluaXRFbmRQb2ludDt2YXIgUT1MLmRlc3Q7cmV0dXJu IGZ1bmN0aW9uKFIpe3UoKTtZQUhPTy51dGlsLkNvbm5lY3QuYXN5bmNSZXF1ZXN0 KCJQT1NUIixpLHtzdWNjZXNzOncsYXJndW1lbnQ6SX0sImluaXRSZXN0QXBpVXJs PSIrZCsiJiIrSS5jcnVtYk5hbWUrIj0iK0kuY3J1bWIrIiZkZXN0SWQ9IitRKyIm bGFuZz0iK0kubGFuZyl9fSgpKTtFLmFkZExpc3RlbmVyKEwudXBzZWxsTGlua0lk LCJtb3VzZW92ZXIiLFApO0UuYWRkTGlzdGVuZXIoTC51cHNlbGxMaW5rSWQsIm1v dXNlb3V0IixNKX1pZihMLmRlc3Q9PWYpe2ooTCxJKX19fTt2YXIgej1mYWxzZSxi PWZhbHNlO3ZhciBjPWZ1bmN0aW9uKGQpe3ZhciBFPVlBSE9PLmVudi5tb2R1bGVz LmNvbm5lY3Rpb24/dHJ1ZTpmYWxzZSxHPVlBSE9PLmVudi5tb2R1bGVzLmpzb24/ dHJ1ZTpmYWxzZSxGPVlBSE9PLmVudi5tb2R1bGVzLmNvbnRhaW5lcj90cnVlOmZh bHNlO2lmKEUmJkcmJkYpe2QoKX1lbHNle2lmKCF6KXt2YXIgQz0ieXVpLzIuNi4w L2J1aWxkLyIsQj0iaHR0cDovL2wueWltZy5jb20vZC9jb21ibz8iO2lmKCFGKXtn KEIrQysiY29udGFpbmVyL2Fzc2V0cy9za2lucy9zYW0vY29udGFpbmVyLmNzcyIp fXZhciBEPSIiO0QrPUU/IiI6KEQ/IiYiOiIiKStDKyJjb25uZWN0aW9uL2Nvbm5l Y3Rpb24tbWluLmpzIjtEKz1HPyIiOihEPyImIjoiIikrQysianNvbi9qc29uLW1p bi5qcyI7RCs9Rj8iIjooRD8iJiI6IiIpK0MrImNvbnRhaW5lci9jb250YWluZXIt bWluLmpzIjt0KEIrRCk7ej10cnVlfXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmNh bGwobnVsbCxkKX0sMTAwKX19O3ZhciBtPWZ1bmN0aW9uKCl7aWYoIVlBSE9PLlVw ZGF0ZXN8fCFZQUhPTy5VcGRhdGVzLkRpc2NDb25maWcpe3JldHVybn1jKGZ1bmN0 aW9uKCl7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwieXVp LXNraW4tc2FtIik7dmFyIEI9WUFIT08uVXBkYXRlcy5EaXNjQ29uZmlnO2Zvcih2 YXIgQyBpbiBCKXtpZihZQUhPTy5sYW5nLmhhc093blByb3BlcnR5KEIsQykpe3Zh ciBkPVlBSE9PLlVwZGF0ZXMuRGlzY0NvbmZpZ1tDXTthLmluaXRSZW5kZXJlZElu c3RhbmNlKGQpfX19KX07WUFIT08udXRpbC5FdmVudC5hZGRMaXN0ZW5lcih3aW5k b3csImxvYWQiLG0pO3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGQ9W107dmFyIEM9W107 dmFyIEc9ZnVuY3Rpb24oSil7Q1tDLmxlbmd0aF09Sn07dmFyIEg9ZnVuY3Rpb24o KXt2YXIgTCxLLEo7Zm9yKEw9MCxLPUMubGVuZ3RoO0w8SztMKyspe0o9Q1tMXTtp Zih0eXBlb2YoSi5mbik9PSJmdW5jdGlvbiIpe0ouZm4uY2FsbChKLnNjb3BlLEou b2JqKX19fTt2YXIgRT1mdW5jdGlvbihKKXtjKGZ1bmN0aW9uKCl7dmFyIEs9WUFI T08ubGFuZy5KU09OLnBhcnNlKEopO2RbZC5sZW5ndGhdPUs7cyhLKX0pfTt2YXIg Qj1mdW5jdGlvbigpe307dmFyIEk9ZnVuY3Rpb24oSyl7dmFyIEo9ZnVuY3Rpb24o Til7dmFyIFA9WUFIT08ubGFuZy5KU09OLnBhcnNlKE4ucmVzcG9uc2VUZXh0KSxN PVlBSE9PLnV0aWwuRG9tLFE9TS5nZXQoSy5jb250YWluZXJJZCksTD1ZQUhPTy5s YW5nLkpTT04ucGFyc2UoUC5qc19jb25maWcpO3ZhciBPPU0uZ2V0QW5jZXN0b3JC eVRhZ05hbWUoUSwiZGl2Iik7Ty5pbm5lckhUTUw9UC5odG1sO3MoTCl9O1lBSE9P LnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIlBPU1QiLGkse3N1Y2Nlc3M6Sn0s ImZldGNoSW5saW5lTWFya3VwQW5kQ29uZmlnPXRydWUmc291cmNlPSIrSy5zb3Vy Y2UrIiZ0eXBlPSIrSy50eXBlKyImbGFuZz0iK0subGFuZysiJmlkPSIrSy5pZCsi JiIrSy5jcnVtYk5hbWUrIj0iK0suY3J1bWIpfTt2YXIgRj1mdW5jdGlvbigpe2Zv cih2YXIgSz0wLEo9ZC5sZW5ndGg7SzxKO0srKyl7SShkW0tdKX19O3ZhciBEPWZ1 bmN0aW9uKE0pe2Zvcih2YXIgSz0wLEo9ZC5sZW5ndGg7SzxKO0srKyl7dmFyIEw9 ZFtLXTtpZihMLmlkIT1NKXtJKEwpfX19O3JldHVybntpbml0UmVuZGVyZWRJbnN0 YW5jZTpFLHN5bmNPdGhlckluc3RhbmNlczpELHVwZGF0ZUFsbEluc3RhbmNlczpG LGFkZEluc3RhbmNlOkIscmVnaXN0ZXJQb3N0TGlua0NhbGxiYWNrOkcsZXhlY3V0 ZVBvc3RMaW5rQ2FsbGJhY2tzOkh9fSgpO3JldHVybnttYW5hZ2VyOmEsc2hvd0Rp YWxvZzp5LGdldERpYWxvZzpvLGRlc3Ryb3lEaWFsb2c6cixnZXRYbWxOb2RlVmFs dWU6dixjcmVhdGVOb2RlOkEsYWRkQ3NzOmcsYWRkSnM6dCx2ZXJzaW9uOjF9fSgp O1lBSE9PLm5hbWVzcGFjZSgnWUFIT08uRVUud2lkZ2V0LkNhcm91c2VsJyk7WUFI T08uRVUud2lkZ2V0LkNhcm91c2VsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fTtZ QUhPTy5FVS53aWRnZXQuQ2Fyb3VzZWwucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9u KGVsLG9Db25maWcpe3RoaXMub0NvbmZpZz1vQ29uZmlnO3RoaXMuc1RhZz1vQ29u ZmlnLnRhZ3x8InVsIjt0aGlzLm5WaXNpYmxlUGFuZXM9b0NvbmZpZy52aXNpYmxl UGFuZXN8fDE7dGhpcy5uUGFuZXNUb01vdmU9b0NvbmZpZy5wYW5lc1RvTW92ZXx8 dGhpcy5uVmlzaWJsZVBhbmVzO3RoaXMuYkhvcml6b250YWw9IW9Db25maWcuaXNW ZXJ0aWNhbDt0aGlzLmJMb29wPW9Db25maWcubG9vcHx8MDt0aGlzLm9Db250PVlB SE9PLnV0aWwuRG9tLmdldChlbCk7dGhpcy5vQ2xpcD1ZQUhPTy51dGlsLkRvbS5n ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbGlwJywnZGl2Jyx0aGlzLm9Db250KVsw XTt0aGlzLm9QYW5lbD10aGlzLm9Db250LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRo aXMuc1RhZylbMF07dGhpcy5vQnV0dG9uQ29udD1vQ29uZmlnLmJ1dHRvbkNvbnR8 fHRoaXMub0NvbnQ7dGhpcy5uQ3VycmVudFBhbmU9MDtZQUhPTy51dGlsLkRvbS5h ZGRDbGFzcyh0aGlzLm9Db250LCJqcyIpO1lBSE9PLnV0aWwuRG9tLmFkZENsYXNz KHRoaXMub0NvbnQsKHRoaXMuYkhvcml6b250YWwpPyJob3J6IjoidmVydCIpO3Ro aXMuYXNzaWduRWxlbWVudHMoKTtZQUhPTy51dGlsLkRvbS5zZXRTdHlsZSh0aGlz Lm9DbGlwLCJvdmVyZmxvdyIsImhpZGRlbiIpO1lBSE9PLnV0aWwuRG9tLnNldFN0 eWxlKHRoaXMub0NsaXAsImNsaXAiLCJyZWN0KDAgIit0aGlzLm9Db250Lm9mZnNl dFdpZHRoKyJweCAiK3RoaXMub0NvbnQub2Zmc2V0SGVpZ2h0KyJweCAwKSIpO3Ro aXMuY3JlYXRlTmF2KCk7dGhpcy5jcmVhdGVFdmVudHMoKTt0aGlzLm9uQW5pbVN0 YXJ0LmZpcmUoKTtyZXR1cm4gdGhpczt9LGFzc2lnbkVsZW1lbnRzOmZ1bmN0aW9u KCl7dmFyIG9QYW5lbD10aGlzLm9QYW5lbDt0aGlzLmFQYW5lbHM9WUFIT08udXRp bC5Eb20uZ2V0RWxlbWVudHNCeShmdW5jdGlvbihvKXtpZihvLnBhcmVudE5vZGU9 PW9QYW5lbCl7cmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fSwibGkiLHRoaXMu b1BhbmVsKTt2YXIgblBhZGRpbmc9dGhpcy5nZXRQYWRkaW5nKHRoaXMuYVBhbmVs c1swXSk7dmFyIG5QYWRkaW5nQ29udD10aGlzLmdldFBhZGRpbmcodGhpcy5vQ29u dCk7dGhpcy5uTW92ZUluYz1NYXRoLmZsb29yKCh0aGlzLmJIb3Jpem9udGFsKT8o dGhpcy5vQ29udC5vZmZzZXRXaWR0aC1uUGFkZGluZ0NvbnQpL3RoaXMublZpc2li bGVQYW5lczoodGhpcy5vQ29udC5vZmZzZXRIZWlnaHQtblBhZGRpbmdDb250KS90 aGlzLm5WaXNpYmxlUGFuZXMpLW5QYWRkaW5nO2Zvcih2YXIgaT0wLGo9dGhpcy5h UGFuZWxzLmxlbmd0aDtpPGo7aSsrKXtpZih0aGlzLmJIb3Jpem9udGFsKXt0aGlz LmFQYW5lbHNbaV0uc3R5bGUud2lkdGg9dGhpcy5uTW92ZUluYysicHgiO31lbHNl e3RoaXMuYVBhbmVsc1tpXS5zdHlsZS5oZWlnaHQ9dGhpcy5uTW92ZUluYysicHgi O319CnRoaXMubk1vdmVJbmMrPW5QYWRkaW5nO3RoaXMublBhbmVzPXRoaXMuYVBh bmVscy5sZW5ndGg7fSxnZXRQYWRkaW5nOmZ1bmN0aW9uKG8pe3JldHVybih0aGlz LmJIb3Jpem9udGFsKT8ocGFyc2VJbnQoWUFIT08udXRpbC5Eb20uZ2V0U3R5bGUo bywicGFkZGluZ1JpZ2h0IikpK3BhcnNlSW50KFlBSE9PLnV0aWwuRG9tLmdldFN0 eWxlKG8sInBhZGRpbmdMZWZ0IikpK3BhcnNlSW50KFlBSE9PLnV0aWwuRG9tLmdl dFN0eWxlKG8sImJvcmRlclJpZ2h0V2lkdGgiKS5yZXBsYWNlKCJtZWRpdW0iLDAp KStwYXJzZUludChZQUhPTy51dGlsLkRvbS5nZXRTdHlsZShvLCJib3JkZXJMZWZ0 V2lkdGgiKS5yZXBsYWNlKCJtZWRpdW0iLDApKSk6KHBhcnNlSW50KFlBSE9PLnV0 aWwuRG9tLmdldFN0eWxlKG8sInBhZGRpbmdCb3R0b20iKSkrcGFyc2VJbnQoWUFI T08udXRpbC5Eb20uZ2V0U3R5bGUobywicGFkZGluZ1RvcCIpKStwYXJzZUludChZ QUhPTy51dGlsLkRvbS5nZXRTdHlsZShvLCJib3JkZXJUb3BXaWR0aCIpLnJlcGxh Y2UoIm1lZGl1bSIsMCkpK3BhcnNlSW50KFlBSE9PLnV0aWwuRG9tLmdldFN0eWxl KG8sImJvcmRlckJvdHRvbVdpZHRoIikucmVwbGFjZSgibWVkaXVtIiwwKSkpO30s Y3JlYXRlTmF2OmZ1bmN0aW9uKCl7dGhpcy5vQnV0dG9uQ29udD1ZQUhPTy51dGls LkRvbS5nZXQodGhpcy5vQnV0dG9uQ29udCk7dGhpcy5vQnRuUHJldj1kb2N1bWVu dC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtZQUhPTy51dGlsLkRvbS5hZGRDbGFz cyh0aGlzLm9CdG5QcmV2LCJidG5wcmV2Iik7dGhpcy5vQnRuUHJldi5hcHBlbmRD aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiUHJldmlvdXMiKSk7dGhpcy5v QnV0dG9uQ29udC5hcHBlbmRDaGlsZCh0aGlzLm9CdG5QcmV2KTt0aGlzLm9CdG5O ZXh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1lBSE9PLnV0aWwu RG9tLmFkZENsYXNzKHRoaXMub0J0bk5leHQsImJ0bm5leHQiKTt0aGlzLm9CdG5O ZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJOZXh0Iikp O3RoaXMub0J1dHRvbkNvbnQuYXBwZW5kQ2hpbGQodGhpcy5vQnRuTmV4dCk7fSxj cmVhdGVFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLm9uQW5pbVN0YXJ0PW5ldyBZQUhP Ty51dGlsLkN1c3RvbUV2ZW50KCJvbkFuaW1TdGFydCIpO3RoaXMub25BbmltRW5k PW5ldyBZQUhPTy51dGlsLkN1c3RvbUV2ZW50KCJvbkFuaW1FbmQiKTt0aGlzLm9u TmF2aWdhdGU9bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoIm9uTmF2aWdhdGUi KTt0aGlzLm9uQ2Fyb3VzZWxFbmQ9bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQo Im9uQ2Fyb3VzZWxFbmQiKTt0aGlzLm9uQW5pbVN0YXJ0LnN1YnNjcmliZSh0aGlz LmVuYWJsZUJ1dHRvbnMsdGhpcyx0cnVlKTt0aGlzLm9uQW5pbUVuZC5zdWJzY3Jp YmUodGhpcy5lbmFibGVCdXR0b25zLHRoaXMsdHJ1ZSk7WUFIT08udXRpbC5FdmVu dC5vbih0aGlzLm9CdG5QcmV2LCdjbGljaycsZnVuY3Rpb24oZSl7dGhpcy5tb3Zl QnkoZSwtMSk7fSx0aGlzLHRydWUpO1lBSE9PLnV0aWwuRXZlbnQub24odGhpcy5v QnRuTmV4dCwnY2xpY2snLGZ1bmN0aW9uKGUpe3RoaXMubW92ZUJ5KGUsMSk7fSx0 aGlzLHRydWUpO30sZW5hYmxlQnV0dG9uczpmdW5jdGlvbigpe3RoaXMub0J0blBy ZXYuZGlzYWJsZWQ9ZmFsc2U7dGhpcy5vQnRuTmV4dC5kaXNhYmxlZD1mYWxzZTtZ QUhPTy51dGlsLkRvbS5yZW1vdmVDbGFzcyh0aGlzLm9CdG5QcmV2LCJidG5wcmV2 ZGlzYWJsZWQiKTtZQUhPTy51dGlsLkRvbS5yZW1vdmVDbGFzcyh0aGlzLm9CdG5O ZXh0LCJidG5uZXh0ZGlzYWJsZWQiKTtpZigoIXRoaXMubkN1cnJlbnRQYW5lJiYh dGhpcy5iTG9vcCl8fHRoaXMublZpc2libGVQYW5lcz50aGlzLm5QYW5lcyl7WUFI T08udXRpbC5Eb20uYWRkQ2xhc3ModGhpcy5vQnRuUHJldiwiYnRucHJldmRpc2Fi bGVkIik7dGhpcy5vQnRuUHJldi5kaXNhYmxlZD10cnVlO3RoaXMub0J0bk5leHQu ZGlzYWJsZWQ9ZmFsc2U7fQppZigodGhpcy5uQ3VycmVudFBhbmU+PXRoaXMublBh bmVzLXRoaXMublZpc2libGVQYW5lcyYmIXRoaXMuYkxvb3ApfHwodGhpcy5iTG9v cCYmdGhpcy5uVmlzaWJsZVBhbmVzPnRoaXMublBhbmVzKSl7WUFIT08udXRpbC5E b20uYWRkQ2xhc3ModGhpcy5vQnRuTmV4dCwiYnRubmV4dGRpc2FibGVkIik7dGhp cy5vQnRuUHJldi5kaXNhYmxlZD1mYWxzZTt0aGlzLm9CdG5OZXh0LmRpc2FibGVk PXRydWU7fX0sbW92ZUJ5OmZ1bmN0aW9uKGUsblBhbmVzKXtpZihlKXtZQUhPTy51 dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUpO3RoaXMub25OYXZpZ2F0ZS5maXJl KCk7fQp0aGlzLm5DdXJyZW50UGFuZSs9blBhbmVzKnRoaXMublBhbmVzVG9Nb3Zl O2lmKHRoaXMubkN1cnJlbnRQYW5lK3RoaXMublZpc2libGVQYW5lcy10aGlzLm5Q YW5lc1RvTW92ZT49dGhpcy5uUGFuZXMpe2lmKHRoaXMuYkxvb3Ape3RoaXMubkN1 cnJlbnRQYW5lPTA7fQp0aGlzLm9uQ2Fyb3VzZWxFbmQuZmlyZSgpO31lbHNlIGlm KHRoaXMubkN1cnJlbnRQYW5lPD0tdGhpcy5uUGFuZXNUb01vdmUpe2lmKHRoaXMu Ykxvb3Ape3RoaXMubkN1cnJlbnRQYW5lPXRoaXMublBhbmVzKyhuUGFuZXMqdGhp cy5uUGFuZXNUb01vdmUpO30KdGhpcy5vbkNhcm91c2VsRW5kLmZpcmUoKTt9CnRo aXMuZ290b1BhbmUodGhpcy5uQ3VycmVudFBhbmUpO30sZ290b1BhbmU6ZnVuY3Rp b24oblBhbmUpe2lmKG5QYW5lPDApe25QYW5lPTA7fQppZihuUGFuZT50aGlzLm5Q YW5lcy10aGlzLm5WaXNpYmxlUGFuZXMpe25QYW5lPXRoaXMublBhbmVzLXRoaXMu blZpc2libGVQYW5lczt9CnRoaXMubkN1cnJlbnRQYW5lPW5QYW5lO3ZhciBvQW5p bT1uZXcgWUFIT08udXRpbC5BbmltKHRoaXMub1BhbmVsLCh0aGlzLmJIb3Jpem9u dGFsKT97bGVmdDp7dG86LXRoaXMubk1vdmVJbmMqblBhbmV9fTp7dG9wOnt0bzot dGhpcy5uTW92ZUluYypuUGFuZX19LHRoaXMub0NvbmZpZy5hbmltRHVyYXRpb258 fDAuNSx0aGlzLm9Db25maWcuZWFzaW5nfHxZQUhPTy51dGlsLkVhc2luZy5lYXNl Qm90aCk7dmFyIG9uQW5pbUVuZD1mdW5jdGlvbih0eXBlLGFyZ3Mpe3RoaXMub25B bmltRW5kLmZpcmUoKTt9O29BbmltLm9uQ29tcGxldGUuc3Vic2NyaWJlKG9uQW5p bUVuZCx0aGlzLHRydWUpO3RoaXMub25BbmltU3RhcnQuZmlyZSgpO29BbmltLmFu aW1hdGUoKTt9fTtZQUhPTy5FVS53aWRnZXQuQ2Fyb3VzZWwucHJvdG90eXBlLmF1 dG9QbGF5PWZ1bmN0aW9uKG9Db25maWcpe3ZhciBzZWxmPXRoaXM7aWYob0NvbmZp Zyl7dGhpcy5vQXV0b0NvbmZpZz1vQ29uZmlnO3RoaXMub0J0blBhdXNlPWRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1lBSE9PLnV0aWwuRG9tLmFkZENs YXNzKHRoaXMub0J0blBhdXNlLCJidG5wYXVzZSIpO3RoaXMub0J0blBhdXNlLmFw cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMub0F1dG9Db25m aWcuYnV0dG9uTGFiZWwpKTt0aGlzLm9CdXR0b25Db250LmFwcGVuZENoaWxkKHRo aXMub0J0blBhdXNlKTtZQUhPTy51dGlsLkV2ZW50Lm9uKHRoaXMub0J0blBhdXNl LCdjbGljaycsdGhpcy5wYXVzZSx0aGlzLHRydWUpO3RoaXMub25OYXZpZ2F0ZS5z dWJzY3JpYmUoZnVuY3Rpb24oKXt0aGlzLnBhdXNlKHRydWUpO30sdGhpcyx0cnVl KTt9CnRoaXMuYlBhdXNlZD0wO1lBSE9PLnV0aWwuRG9tLnJlbW92ZUNsYXNzKHRo aXMub0J0blBhdXNlLCJidG5wYXVzZWRpc2FibGVkIik7dGhpcy5vVGltZXI9d2lu ZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCl7c2VsZi5tb3ZlQnkobnVsbCwxKTt9 LHRoaXMub0F1dG9Db25maWcuYXV0b1BsYXlEZWxheXx8NTAwMCk7cmV0dXJuIHRo aXM7fTtZQUhPTy5FVS53aWRnZXQuQ2Fyb3VzZWwucHJvdG90eXBlLnBhdXNlPWZ1 bmN0aW9uKGUpe2lmKGUmJmUhPT10cnVlKXtZQUhPTy51dGlsLkV2ZW50LnByZXZl bnREZWZhdWx0KGUpO2lmKHRoaXMuYlBhdXNlZCl7dGhpcy5tb3ZlQnkobnVsbCwx KTtyZXR1cm4gdGhpcy5hdXRvUGxheSgpO319CnRoaXMuYlBhdXNlZD0xO1lBSE9P LnV0aWwuRG9tLmFkZENsYXNzKHRoaXMub0J0blBhdXNlLCJidG5wYXVzZWRpc2Fi bGVkIik7Y2xlYXJUaW1lb3V0KHRoaXMub1RpbWVyKTt9O1lBSE9PLkVVLndpZGdl dC5DYXJvdXNlbC5wcm90b3R5cGUuZW5hYmxlQ2hlY2tGb3JVcGRhdGVzPWZ1bmN0 aW9uKG9Db25maWcpe3ZhciBzZWxmPXRoaXM7dGhpcy5vTG9hZENvbmZpZz1vQ29u ZmlnO3RoaXMubk1heEl0ZW1zPW9Db25maWcubWF4SXRlbXM7dGhpcy5vTG9hZFRp bWVyPXdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe3NlbGYuY2hlY2tGb3JV cGRhdGVzKCk7fSx0aGlzLm9Mb2FkQ29uZmlnLmNoZWNrRGVsYXl8fDEwMDAwKTt0 aGlzLm9uQ29udGVudENoYW5nZT1uZXcgWUFIT08udXRpbC5DdXN0b21FdmVudCgi b25Db250ZW50Q2hhbmdlIik7cmV0dXJuIHRoaXM7fTtZQUhPTy5FVS53aWRnZXQu Q2Fyb3VzZWwucHJvdG90eXBlLmNoZWNrRm9yVXBkYXRlcz1mdW5jdGlvbigpe1lB SE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoIkdFVCIsdGhpcy5vTG9hZENv bmZpZy51cmwse3N1Y2Nlc3M6dGhpcy5jaGVja2VkRm9yVXBkYXRlcyxzY29wZTp0 aGlzfSk7fTtZQUhPTy5FVS53aWRnZXQuQ2Fyb3VzZWwucHJvdG90eXBlLmNoZWNr ZWRGb3JVcGRhdGVzPWZ1bmN0aW9uKG9SZXNwb25zZSl7dmFyIHJlPS9bXFNdL2c7 aWYoIXJlLnRlc3Qob1Jlc3BvbnNlLnJlc3BvbnNlVGV4dCkpe3JldHVybjt9CnZh ciBzQ3VycmVudEhUTUw9dGhpcy5vUGFuZWwuaW5uZXJIVE1MO3RoaXMub1BhbmVs LmlubmVySFRNTD1vUmVzcG9uc2UucmVzcG9uc2VUZXh0O3RoaXMuYXNzaWduRWxl bWVudHMoKTt0aGlzLmdvdG9QYW5lKDApO3RoaXMuZW5hYmxlQnV0dG9ucygpO2lm KHRoaXMub1BhbmVsLmlubmVySFRNTCE9c0N1cnJlbnRIVE1MKXt0aGlzLm9uQ29u dGVudENoYW5nZS5maXJlKCk7fX07WUFIT08uRVUud2lkZ2V0LkNhcm91c2VsLnBy b3RvdHlwZS5wYWdpbmF0ZT1mdW5jdGlvbigpe3ZhciBvVUw9ZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgidWwiKTtZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyhvVUwsInBh Z2luYXRpb24iKTt0aGlzLnVwZGF0ZVBhZ2luYXRpb249ZnVuY3Rpb24oKXtmb3Io aT0wLGo9dGhpcy5hUGFnZS5sZW5ndGg7aTxqO2krKyl7aWYoaT09PU1hdGguY2Vp bCh0aGlzLm5DdXJyZW50UGFuZS90aGlzLm5QYW5lc1RvTW92ZSkpe1lBSE9PLnV0 aWwuRG9tLmFkZENsYXNzKHRoaXMuYVBhZ2VbaV0sImN1cnJlbnQiKTt0aGlzLmFQ YWdlW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKVswXS5kaXNhYmxl ZD10cnVlO31lbHNle1lBSE9PLnV0aWwuRG9tLnJlbW92ZUNsYXNzKHRoaXMuYVBh Z2VbaV0sImN1cnJlbnQiKTt0aGlzLmFQYWdlW2ldLmdldEVsZW1lbnRzQnlUYWdO YW1lKCJidXR0b24iKVswXS5kaXNhYmxlZD1mYWxzZTt9fX07Zm9yKGk9MCxqPU1h dGguY2VpbCgodGhpcy5uUGFuZXMtdGhpcy5uVmlzaWJsZVBhbmVzKS90aGlzLm5Q YW5lc1RvTW92ZSkrMTtpPGo7aSsrKXt2YXIgb0xJPWRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoImxpIik7dmFyIG9CPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRv biIpO29CLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGkrMSkp O29MSS5hcHBlbmRDaGlsZChvQik7b1VMLmFwcGVuZENoaWxkKG9MSSk7fQp0aGlz LmFQYWdlPVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnkoZnVuY3Rpb24obyl7 aWYoby5wYXJlbnROb2RlPT09b1VMKXtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxz ZTt9LCJsaSIsb1VMKTtZQUhPTy51dGlsLkV2ZW50Lm9uKG9VTCwiY2xpY2siLGZ1 bmN0aW9uKGUpe3RoaXMub25OYXZpZ2F0ZS5maXJlKCk7dGhpcy5nb3RvUGFuZSgo WUFIT08udXRpbC5FdmVudC5nZXRUYXJnZXQoZSkuZmlyc3RDaGlsZC5ub2RlVmFs dWUtMSkqdGhpcy5uUGFuZXNUb01vdmUpO1lBSE9PLnV0aWwuRXZlbnQucHJldmVu dERlZmF1bHQoZSk7fSx0aGlzLHRydWUpO3RoaXMudXBkYXRlUGFnaW5hdGlvbigp O3RoaXMub25BbmltU3RhcnQuc3Vic2NyaWJlKHRoaXMudXBkYXRlUGFnaW5hdGlv bix0aGlzLHRydWUpO3RoaXMub0J1dHRvbkNvbnQuYXBwZW5kQ2hpbGQob1VMKTty ZXR1cm4gdGhpczt9O1lBSE9PLkVVLndpZGdldC5DYXJvdXNlbC5wcm90b3R5cGUu aW5maW5pdGVTY3JvbGw9ZnVuY3Rpb24oKXt0aGlzLm1vdmVCeT1mdW5jdGlvbihl LG5QYW5lcyl7aWYodGhpcy5iQWN0aXZlKXtyZXR1cm47fQppZihlKXtZQUhPTy51 dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUpO3RoaXMub25OYXZpZ2F0ZS5maXJl KCk7fQp0aGlzLm5DdXJyZW50UGFuZSs9blBhbmVzKnRoaXMublBhbmVzVG9Nb3Zl O2lmKHRoaXMubkN1cnJlbnRQYW5lK3RoaXMublZpc2libGVQYW5lcy10aGlzLm5Q YW5lc1RvTW92ZT49dGhpcy5uUGFuZXMpe3RoaXMubkN1cnJlbnRQYW5lPTA7dGhp cy5vbkNhcm91c2VsRW5kLmZpcmUoKTt9ZWxzZSBpZih0aGlzLm5DdXJyZW50UGFu ZTw9LXRoaXMublBhbmVzVG9Nb3ZlKXtyZXR1cm4gdGhpcy5uQ3VycmVudFBhbmU9 MDt9CnRoaXMuZ290b1BhbmUodGhpcy5uQ3VycmVudFBhbmUpO307Zm9yKHZhciBp PTA7aTx0aGlzLm5WaXNpYmxlUGFuZXM7aSsrKXt0aGlzLm9DbG9uZT10aGlzLm9Q YW5lbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGkiKVtpXS5jbG9uZU5vZGUodHJ1 ZSk7dGhpcy5vUGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5vQ2xvbmUpO30KdGhpcy5h c3NpZ25FbGVtZW50cygpO3RoaXMub25BbmltU3RhcnQuc3Vic2NyaWJlKGZ1bmN0 aW9uKCl7dGhpcy5iQWN0aXZlPTE7aWYodGhpcy5uQ3VycmVudFBhbmU9PXRoaXMu blBhbmVzLXRoaXMublZpc2libGVQYW5lcyl7dGhpcy5uQ3VycmVudFBhbmU9MDtp Zih0aGlzLnVwZGF0ZVBhZ2luYXRpb24pe3RoaXMudXBkYXRlUGFnaW5hdGlvbigp O30KdGhpcy5lbmFibGVCdXR0b25zKCk7fX0sdGhpcyx0cnVlKTt0aGlzLm9uQW5p bUVuZC5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZih0aGlzLm5DdXJyZW50UGFuZT09 MCl7dGhpcy5vUGFuZWwuc3R5bGUubGVmdD0wO3RoaXMub1BhbmVsLnN0eWxlLnRv cD0wO30KdGhpcy5iQWN0aXZlPTA7fSx0aGlzLHRydWUpO3JldHVybiB0aGlzO307 WUFIT08uRVUud2lkZ2V0LkNhcm91c2VsLnByb3RvdHlwZS5hbnN3ZXJzU2Nyb2xs PWZ1bmN0aW9uKCl7dmFyIG5QcmV2UGFuZT0wO2Zvcih2YXIgaT0xLGxlbj10aGlz Lm5QYW5lcztpPGxlbjtpKyspe1lBSE9PLnV0aWwuRG9tLnNldFN0eWxlKHRoaXMu YVBhbmVsc1tpXSwnbGVmdCcsJzEwMCUnKTt9CnRoaXMubW92ZUJ5PWZ1bmN0aW9u KGUsblBhbmVzKXtpZih0aGlzLmJBY3RpdmUpe3JldHVybjt9CmlmKGUpe1lBSE9P LnV0aWwuRXZlbnQucHJldmVudERlZmF1bHQoZSk7dGhpcy5vbk5hdmlnYXRlLmZp cmUoKTt9CnRoaXMubkN1cnJlbnRQYW5lKz1uUGFuZXMqdGhpcy5uUGFuZXNUb01v dmU7aWYodGhpcy5uQ3VycmVudFBhbmUrdGhpcy5uVmlzaWJsZVBhbmVzLXRoaXMu blBhbmVzVG9Nb3ZlPj10aGlzLm5QYW5lcyl7aWYodGhpcy5iTG9vcCl7dGhpcy5u Q3VycmVudFBhbmU9MDt9CnRoaXMub25DYXJvdXNlbEVuZC5maXJlKCk7fWVsc2Ug aWYodGhpcy5uQ3VycmVudFBhbmU8PS10aGlzLm5QYW5lc1RvTW92ZSl7aWYodGhp cy5iTG9vcCl7dGhpcy5uQ3VycmVudFBhbmU9dGhpcy5uUGFuZXMrKG5QYW5lcyp0 aGlzLm5QYW5lc1RvTW92ZSk7fQp0aGlzLm9uQ2Fyb3VzZWxFbmQuZmlyZSgpO30K dGhpcy5nb3RvUGFuZSh0aGlzLm5DdXJyZW50UGFuZSxuUGFuZXM8MD8nLSc6Jysn KTt9O3RoaXMuZ290b1BhbmU9ZnVuY3Rpb24oblBhbmUsc0RpcmVjdGlvbil7aWYo dGhpcy5iQWN0aXZlKXtyZXR1cm47fQppZihuUGFuZTwwKXtuUGFuZT0wO30KaWYo blBhbmU+dGhpcy5uUGFuZXMtdGhpcy5uVmlzaWJsZVBhbmVzKXtuUGFuZT10aGlz Lm5QYW5lcy10aGlzLm5WaXNpYmxlUGFuZXM7fQppZighc0RpcmVjdGlvbil7c0Rp cmVjdGlvbj1uUGFuZT5uUHJldlBhbmU/JysnOictJzt9CllBSE9PLnV0aWwuRG9t LnNldFN0eWxlKHRoaXMuYVBhbmVsc1tuUGFuZV0sJ2xlZnQnLHNEaXJlY3Rpb249 PT0nKyc/JzYyOXB4JzonLTYyOXB4Jyk7dGhpcy5uQ3VycmVudFBhbmU9blBhbmU7 dmFyIG9BbmltPW5ldyBZQUhPTy51dGlsLkFuaW0odGhpcy5hUGFuZWxzW25QYW5l XSwodGhpcy5iSG9yaXpvbnRhbCk/e2xlZnQ6e3RvOjB9fTp7dG9wOnt0bzowfX0s dGhpcy5vQ29uZmlnLmFuaW1EdXJhdGlvbnx8MC41LHRoaXMub0NvbmZpZy5lYXNp bmd8fFlBSE9PLnV0aWwuRWFzaW5nLmVhc2VCb3RoKTt2YXIgb25BbmltRW5kPWZ1 bmN0aW9uKHR5cGUsYXJncyl7dGhpcy5vbkFuaW1FbmQuZmlyZShuUGFuZSk7fTtv QW5pbS5vbkNvbXBsZXRlLnN1YnNjcmliZShvbkFuaW1FbmQsdGhpcyx0cnVlKTt0 aGlzLm9uQW5pbVN0YXJ0LmZpcmUoblBhbmUpO29BbmltLmFuaW1hdGUoKTt9O3Ro aXMub25BbmltU3RhcnQuc3Vic2NyaWJlKGZ1bmN0aW9uKHR5cGUsblBhbmUpe3Ro aXMuYkFjdGl2ZT0xO3ZhciBvQW5pbT1uZXcgWUFIT08udXRpbC5BbmltKHRoaXMu YVBhbmVsc1tuUHJldlBhbmVdLHtvcGFjaXR5Ont0bzowfX0sdGhpcy5vQ29uZmln LmFuaW1EdXJhdGlvbnx8MC41LHRoaXMub0NvbmZpZy5lYXNpbmd8fFlBSE9PLnV0 aWwuRWFzaW5nLmVhc2VCb3RoKTtvQW5pbS5hbmltYXRlKCk7fSx0aGlzLHRydWUp O3RoaXMub25BbmltRW5kLnN1YnNjcmliZShmdW5jdGlvbih0eXBlLG5QYW5lKXt0 aGlzLmJBY3RpdmU9MDtZQUhPTy51dGlsLkRvbS5zZXRTdHlsZSh0aGlzLmFQYW5l bHNbblByZXZQYW5lXSwnbGVmdCcsJzEwMCUnKTtZQUhPTy51dGlsLkRvbS5zZXRT dHlsZSh0aGlzLmFQYW5lbHNbblByZXZQYW5lXSwnb3BhY2l0eScsJzEnKTtuUHJl dlBhbmU9blBhbmU7fSx0aGlzLHRydWUpO3JldHVybiB0aGlzO307KGZ1bmN0aW9u KCl7aWYodG9wIT09c2VsZil7dmFyIHdoaXRlbGlzdD1bJ3lhaG9vLmNvbScsJ2dv b2dsZS5jb20nXTt2YXIgbWF0Y2g9ZG9jdW1lbnQucmVmZXJyZXIubWF0Y2goLzpc L1wvKC5bXlwvP10rKS8pWzFdO2Zvcih2YXIgaT0wLGxlbj13aGl0ZWxpc3QubGVu Z3RoO2k8bGVuO2krKyl7dmFyIGRvbWFpbnJlPW5ldyBSZWdFeHAoJyhefC4pJyt3 aGl0ZWxpc3RbaV0rJyQnLCdnaScpO2lmKGRvbWFpbnJlLmV4ZWMobWF0Y2gpKXty ZXR1cm47fX0KdG9wLmxvY2F0aW9uLmhyZWY9c2VsZi5sb2NhdGlvbi5ocmVmO319 KSgpO2lmKHR5cGVvZiBZQUhPTyE9PSd1bmRlZmluZWQnKXtZQUhPTy5uYW1lc3Bh Y2UoJ1NlYXJjaC5BbnN3ZXJzJyk7WUFIT08uU2VhcmNoLkFuc3dlcnM9e21vcmVs aXN0czpbe2lkOid5YW4taW50ZXJlc3RpbmctbWVudScsYW1vdW50OjEyLG1heDo1 MH1dfTtZQUhPTy51dGlsLkV2ZW50Lm9uRE9NUmVhZHkoZnVuY3Rpb24oKXtZQUhP Ty5TZWFyY2guQW5zd2Vycy5pbnRlcmZhY2VSZWFkeS5maXJlKCk7fSk7WUFIT08u bmFtZXNwYWNlKCdZQUhPTy53aWRnZXQuQ2hhcnQnKTtZQUhPTy53aWRnZXQuQ2hh cnQuU1dGVVJMPSJodHRwOi8veXVpLnlhaG9vYXBpcy5jb20vMi43LjAvYnVpbGQv Y2hhcnRzL2Fzc2V0cy9jaGFydHMuc3dmIjt9CllBSE9PLlNlYXJjaC5BbnN3ZXJz LmNzcz17anNFbmFibGVkQ2xhc3M6J2pzJyxoaWRlQ2xhc3M6J2hpZGUnLHNob3dD bGFzczonc2hvdyd9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5tb3JlTGlzdD17 bW9yZUNsYXNzOidzaG93LW1vcmUnLGV4dHJhQ2xhc3M6J2V4dHJhJ307WUFIT08u U2VhcmNoLkFuc3dlcnMuY3NzLmFuc3dlcnNDb21wYWN0PXtjb21wYWN0Q2xhc3M6 J2xvdy1yYXRpbmcnLGhpZGVDbGFzczonaGlkZGVuJyx0b2dnbGVDbGFzczondG9n Z2xlJyxhbnN3ZXJQcmVmaXg6J2Fuc3dlci0nfTtZQUhPTy5TZWFyY2guQW5zd2Vy cy5jc3MuYXNrTWluaT17dGV4dEFyZWE6J3lhbi1hc2ttaW5pLXEnLGNvdW50Q2xh c3M6J2NvdW50LWNoYXJzJ307WUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnVzZXJQ cm9maWxlQ2FyZD17cHJvZmlsZUNsYXNzOidwcm9maWxlJyxwcm9maWxlUHJlZml4 Oidwcm9maWxlLScsc3RhdHNQcmVmaXg6J3N0YXRzLScsbXlTdGF0dXNJZDoneWFu LW15c3RhdHVzJyxmb290ZXJDbGFzczonbmV0d29yaycscHJvZmlsZUNhcmRJZDon eWFuLXVzZXItcHJvZmlsZS1jYXJkJ307WUFIT08uU2VhcmNoLkFuc3dlcnMuY3Nz LmNvbW1lbnRQYW5lPXtjb21tZW50QnV0dG9uSWQ6J3lhbi1jb21tZW50LWxpbmsn LGNvbW1lbnRQYW5lSWQ6J3lhbi1jb21tZW50cycsY29tbWVudENsYXNzOidjb21t ZW50JyxzaG93Q2xhc3M6J3Nob3cnLG9wZW5CdXR0b25DbGFzczonb3BlbicsZXJy b3JDbGFzczonZXJyb3InfTtZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MucG9pbnRz QWxlcnQ9e215QWxlcnRJZDoneWFuLW15aW5jZW50aXZlcyd9O1lBSE9PLlNlYXJj aC5BbnN3ZXJzLmNzcy5hbnN3ZXJzU29ydD17Zm9ybUlkOid5YW4tYW5zd2VyLXNv cnQnLHNlbGVjdElkOid5YW4tYW5zd2VyLXNvcnQtYm94JyxidXR0b25DbGFzczon YnV0dG9uJyxoYXNoVG86J3lhbi1hbnN3ZXJzJ307WUFIT08uU2VhcmNoLkFuc3dl cnMuY3NzLmFuc3dlcnNSYXRpbmc9e3N1Y2Nlc3NDbGFzczonc3VjY2VzcycsZmFp bHVyZUNsYXNzOidmYWlsdXJlJyxsb2FkaW5nQ2xhc3M6J2xvYWRpbmcnLHJhdGVV cENsYXNzOidyYXRlLXVwJyxyYXRlRG93bkNsYXNzOidyYXRlLWRvd24nLHJhdGVC dXR0b25DbGFzczoncmF0ZS1idXR0b24nLGRpc2FibGVkQ2xhc3M6J2Rpc2FibGVk JyxkeW5hbWljQ2xhc3M6J2R5bmFtaWMnLHJhdGVkQ2xhc3M6J3JhdGVkJyx1dGls Q2xhc3M6J2Fuc3dlci11dGlsJyx0aHVtYkNsYXNzOid0aHVtYi1zdGF0dXMnfTtZ QUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYWN0aW9uQmFyPXthY3Rpb25CYXJJZDon eWFuLXF1ZXN0aW9uLXRvb2xzJyxkcm9wRG93bklkczpbJ3lhbi1lZGl0LXF1ZXN0 aW9uJywneWFuLXNhdmUtcXVlc3Rpb24nXSxkcm9wRG93bkNsYXNzOidtZW51Jyxt ZW51UG9zdGZpeDonLW1lbnUnLGZpcnN0SXRlbTonZmlyc3QtY2hpbGQnfTtZQUhP Ty5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9uPXthZGRTdGFyQ2xhc3M6 J2FkZC1zdGFyJyxyZW1vdmVTdGFyQ2xhc3M6J3JlbW92ZS1zdGFyJyxzaG93U3Rh dHVzQ2xhc3M6J3Nob3ctc3RhdHVzJyxzdWNjZXNzQ2xhc3M6J3N1Y2Nlc3MnLGZh aWx1cmVDbGFzczonZmFpbHVyZScsc3RhcnJlZENsYXNzOidzdGFycmVkJyxyZW1v dmVTdGFyQ2xhc3M6J3JlbW92ZS1zdGFyJyxhZGRTdGFyQ2xhc3M6J2FkZC1zdGFy JyxoYXNTdGFyc0NsYXNzOidoYXMtc3RhcnMnLHN0YXJDb3VudENsYXNzOidzdGFy LWNvdW50JyxzdGF0dXNQcmVmaXg6J3N0YXJzdGF0dXMtJyxzdGFyU3RhdHVzQ2xh c3M6J3N0YXItc3RhdHVzJ307WUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmNvbnRh Y3RMaW5rcz17Y29udGFjdExpc3Q6J25ldHdvcmsnLGlzQ29udGFjdDonY29udGFj dCcsaXNCbG9ja2VkOidibG9ja2VkJyxhZGRDb250YWN0OidhZGQtY29udGFjdCcs YmxvY2tVc2VyOidibG9jay11c2VyJ307WUFIT08uU2VhcmNoLkFuc3dlcnMuY3Nz LmFsZXJ0UGFuZT17YWxlcnRJZDoneWFuLWFsZXJ0J307WUFIT08uU2VhcmNoLkFu c3dlcnMuY3NzLnNlb1RodW1icz17cmF0ZUlkOid5YW4tc2VvLXRvb2xzJyx1cElk OidzZW8tcmF0ZS11Jyxkb3duSWQ6J3Nlby1yYXRlLWQnLG9uQ2xhc3M6J29uJyxj b250YWluZXJDbGFzczonY29udGFpbmVyJyx5ZXNIZENsYXNzOidvbicsbG9nZ2Vk SW5DbGFzczonbG9nZ2VkLWluJyxjb3VudENsYXNzOidjb3VudC1jaGFycyd9O1lB SE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5zcGVsbENoZWNrZXI9e2NvbnRhaW5lcjon c3BlbGxjaGVjay1jb250YWluZXInLHN1Z2dlc3RlZExhYmVsOid5YW4tc3VnZ2Vz dGVkd29yZCcsb3RoZXJMYWJlbDoneWFuLW90aGVyd29yZHMnLGNoZWNrQ2xhc3M6 J3NwZWxsY2hlY2snLHRyaWdnZXJDbGFzczonc3BlbGwtdHJpZ2dlcid9O1lBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5jb25maXJtYXRpb25zPXtzZWxlY3RvcnM6Wyd5 YW4tZGVsZXRlLXF1ZXN0aW9uJywneWFuLWRlbGV0ZS1hbnN3ZXInLCdkZWxldGUt Y29tbWVudCddfTtZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYXNrRmxvdz17bGFi ZWxNb3ZlRnJvbToneWFuLWFzay10aXRsZS1sJyxsYWJlbE1vdmVUbzoneWFuLWFz ay10aXRsZScsbGFiZWxNb3ZlZENsYXNzOidkZWZhdWx0Jyxjb3VudENsYXNzOidj b3VudC1jaGFycyd9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJGbG93 PXt3ZWJTZWFyY2hGb3JtOid5YW4tYW5zd2VyLXNlYXJjaC1pbmxpbmUnLGFjdHNB c0xhYmVsOidhY3RzLWFzLWxhYmVsJ307WUFIT08uU2VhcmNoLkFuc3dlcnMuY3Nz LnRhYlZpZXc9e3RhYkNsYXNzOid0YWItdmlldycsc2hvd0NsYXNzOidzZWxlY3Rl ZCcsaGlkZUNsYXNzOidub3Qtc2VsZWN0ZWQnLGJkQ2xhc3M6J2JkJyxoZENsYXNz OidoZCd9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5tdWx0aVNlbGVjdD17bXVs dGlTZWxlY3RDbGFzczonbXVsdGktc2VsZWN0J307WUFIT08uU2VhcmNoLkFuc3dl cnMuY3NzLnByb2ZpbGVSZWdpc3RyYXRpb249e2NoYW5nZVJlZzonY2hhbmdlLXJl Z2lzdHJhdGlvbid9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5lZGl0QWJvdXRZ b3U9e2NvdW50Q2xhc3M6J3JlZ2lzdHJhdGlvbi1hYm91dC15b3UnfTtZQUhPTy5T ZWFyY2guQW5zd2Vycy5jc3MuYmVzdEFuc3dlcj17Y291bnRDbGFzczonY291bnQt Y2hhcnMnfTtZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuZG9tQ29sbGFwc2U9e3Ry aWdnZXJDbGFzczondHJpZ2dlcicsaGlkZUNsYXNzOidoaWRlJyxwYXJlbnRDbGFz czoncGFyZW50JyxvcGVuQ2xhc3M6J29wZW4nfTtZQUhPTy5TZWFyY2guQW5zd2Vy cy5jc3MubWFya2V0aW5nVmlkZW89e3ZpZGVvSWQ6J3lhbi1tYXJrZXRpbmctdmlk ZW8nfTtZQUhPTy5uYW1lc3BhY2UoJ1lBSE9PLlNlYXJjaC5BbnN3ZXJzJyk7WUFI T08uU2VhcmNoLkFuc3dlcnMubGFiZWxzPXthbGxMYWJlbDoiTW9zdHJhciBsYXMg JWNvdW50JS4uLiIsbW9yZUxhYmVsOiJNw6FzLi4uIixoaWRlTGFiZWw6Ik9jdWx0 YXIuLi4iLGVycm9yVHJ5QWdhaW46IkxvIHNlbnRpbW9zLCBwb3IgZmF2b3IsIGlu dMOpbnRhbG8gbnVldmFtZW50ZS4ifTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMuYW5zd2Vyc1JhdGluZz17c2F2aW5nOiJHdWFyZGFuZG8uLi4iLGNvbm5lY3Rp b25FcnJvcjoiTG8gc2VudGltb3MsIG5vIGhlbW9zIHBvZGlkbyBndWFyZGFyIHR1 IGNhbGlmaWNhY2nDs24uIEludMOpbnRhbG8gbcOhcyB0YXJkZS4iLHN1Y2Nlc3M6 IsKhR3JhY2lhcyBwb3IgY2FsaWZpY2FyISJ9O1lBSE9PLlNlYXJjaC5BbnN3ZXJz LmxhYmVscy5zdGFyUXVlc3Rpb249e2FkZFN1Y2Nlc3M6IiVlbXBoYXNpc19vcGVu JUdyYWNpYXMuJWVtcGhhc2lzX2Nsb3NlJSBFc3RhIHByZWd1bnRhIHNlIGhhIGHD sWFkaWRvIGEgdHUgJWxpbmtfb3BlbiVsaXN0YSBkZSBwcmVndW50YXMgZXN0cmVs bGElbGlua19jbG9zZSUuIixvdmVyTGltaXQ6IiVlbXBoYXNpc19vcGVuJUxvIHNl bnRpbW9zLCVlbXBoYXNpc19jbG9zZSUgaGFzIGxsZWdhZG8gYWwgbMOtbWl0ZSBk aWFyaW8gZGUgZXN0cmVsbGFzLiIsY29ubmVjdGlvbkVycm9yOiIlZW1waGFzaXNf b3BlbiVMbyBzZW50aW1vcywlZW1waGFzaXNfY2xvc2UlIG5vIHNlIGhhIHBvZGlk byBndWFyZGFyIHR1IGVzdHJlbGxhLiBQb3IgZmF2b3IsIHZ1ZWx2ZSBhIGludGVu dGFybG8gbcOhcyB0YXJkZS4ifTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMu dXNlclByb2ZpbGVDYXJkPXttZW1iZXJTaW5jZToiTWllbWJybyBkZXNkZSBlbDoi LHRvdGFsUG9pbnRzOiJUb3RhbCBkZSBwdW50b3M6Iix3ZWJzaXRlTGFiZWw6IlDD oWdpbmEgd2ViOiIsdGhpc1dlZWs6IlB1bnRvcyBjb25zZWd1aWRvcyBlc3RhIHNl bWFuYToiLGFkZENvbnRhY3Q6IkHDsWFkaXIgY29udGFjdG8iLGJsb2NrVXNlcjoi QmxvcXVlYXIgdXN1YXJpbyIsbG9hZGluZzoiQ2FyZ2FuZG8iLGJlc3RBbnN3ZXI6 Ik1lam9yIHJlc3B1ZXN0YSIsYW5zd2VyQ291bnRTaW5ndWxhcjoiJWNvdW50JSBy ZXNwdWVzdGEiLGFuc3dlckNvdW50UGx1cmFsOiIlY291bnQlIHJlc3B1ZXN0YXMi fTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuYWN0aW9uQmFyPXtmaXJzdExp bmtzOnsneWFuLWVkaXQtcXVlc3Rpb24nOiJBw7FhZGlyIGluZm9ybWFjacOzbiIs J3lhbi1zYXZlLXF1ZXN0aW9uJzoiQWdyZWdhciBhIG1pIGxpc3RhIHByaXZhZGEg ZGUgdmlnaWxhZGFzIn19O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jYWxl bmRhcj17ZGF5TmFtZXM6WyJEbyIsIkx1IiwiTWEiLCJNaSIsIkp1IiwiVmkiLCJT w6EiXSxtb250aE5hbWVzOlsiRW5lcm8iLCJGZWJyZXJvIiwiTWFyem8iLCJBYnJp bCIsIk1heW8iLCJKdW5pbyIsIkp1bGlvIiwiQWdvc3RvIiwiU2VwdGllbWJyZSIs Ik9jdHVicmUiLCJOb3ZpZW1icmUiLCJEaWNpZW1icmUiXSxzdGFydFdlZWtkYXk6 IjEifTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuYXNrTWluaT17bm9UZXh0 OiJCZW5lZsOtY2lhdGUgZGVsIGNvbm9jaW1pZW50byBkZSBtaWxsb25lcyBkZSBw ZXJzb25hcy4ifTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExp bmtzPXthZGRDb250YWN0OiJBw7FhZGlyIGNvbnRhY3RvIixibG9ja0NvbnRhY3Q6 IkJsb3F1ZWFyIHVzdWFyaW8iLHJlbW92ZUNvbnRhY3Q6IkJvcnJhciBkZSBBbWln b3MiLHJlbW92ZUJsb2NrOiJEZXNibG9xdWVhciIsZ2VuZXJpY05hbWU6IsOJbCAv IEVsbGEiLGFkZFN1Y2Nlc3NIZDoiJW5pY2slIGhhIHNpZG8gYcOxYWRpZG8gYSB0 dXMgQW1pZ29zIixhZGRTdWNjZXNzOiIlbmljayUgaGEgc2lkbyBhw7FhZGlkbyBj b3JyZWN0YW1lbnRlIGEgdHUgUmVkIixyZW1vdmVTdWNjZXNzSGQ6IiVuaWNrJSBo YSBzaWRvIGJvcnJhZG8gZGUgQW1pZ29zIixyZW1vdmVTdWNjZXNzOiIlbmljayUg aGEgc2lkbyBib3JyYWRvIGNvcnJlY3RhbWVudGUiLGJsb2NrU3VjY2Vzc0hkOiIl bmljayUgaGEgc2lkbyBhw7FhZGlkbyBhIHR1IGxpc3RhIGRlIFVzdWFyaW9zIEJs b3F1ZWFkb3MiLGJsb2NrU3VjY2VzczoiJW5pY2slIHlhIG5vIHBvZHLDoSBhw7Fh ZGlydGUgYSBzdXMgY29udGFjdG9zLiAlbmljayUgbm8gcG9kcsOhIGFjY2VkZXIg YSB0dSBSZWQgbmkgYSB0dXMgUHJlZ3VudGFzIHkgUmVzcHVlc3RhcyBwb3IgbWVk aW8gZGUgbGEgcMOhZ2luYSBkZSB0dSBwZXJmaWwgcMO6YmxpY28uIixyQmxvY2tT dWNjZXNzSGQ6IiVuaWNrJSBoYSBzaWRvIGJvcnJhZG8gZGUgdHUgbGlzdGEgZGUg VXN1YXJpb3MgQmxvcXVlYWRvcyIsckJsb2NrU3VjY2VzczoiJW5pY2slIHBvZHLD oSBhw7FhZGlydGUgYSBzdXMgY29udGFjdG9zLiAlbmljayUgdGFtYmnDqW4gcG9k csOhIGFjY2VkZXIgYSB0dSBSZWQgeSBhIHR1cyBQcmVndW50YXMgeSBSZXNwdWVz dGFzIHBvciBtZWRpbyBkZSBsYSBww6FnaW5hIGRlIHR1IHBlcmZpbCBww7pibGlj by4iLG9rYXk6IkFjZXB0YXIiLGVycm9ySGQ6IkxvIHNlbnRpbW9zLiIsZXJyb3JC ZDoiQWxnbyBoZW1vcyBoZWNobyBtYWwsIHBydWViYSBhIGludMOpbnRhbG8gb3Ry YSB2ZXoiLGNvbnRhY3RMaW1pdEhkOiJQZXJkb25hLCBoYXMgc3VwZXJhZG8gZWwg bMOtbWl0ZSBlbiB0dSBuw7ptZXJvIGRlIGNvbnRhY3Rvcy4iLGNvbnRhY3RMaW1p dEJkOiJOZWNlc2l0YXMgPGEgaHJlZj1cIi9teS9jb250YWN0cy9jb25uZWN0aW9u cy9cIj5ib3JyYXIgZ2VudGUgZGUgdHUgUmVkIGRlIGNvbm9jaW1pZW50byA8L2E+ IHBhcmEgcXVlIHB1ZWRhcyBpbnZpdGFyIGEgb3Ryb3MiLGNvbnRhY3ROQUhkOiJO byBwdWVkZSBzZXIgYcOxYWRpZG8gYSB0dXMgQW1pZ29zIixjb250YWN0TkFCZDoi RXN0YSBwZXJzb25hIG5vIHBlcm1pdGUgcXVlIG90cm9zIHVzdWFyaW9zIGxlIGHD sWFkYW4gYSBzdSBsaXN0YSBkZSBBbWlnb3MiLGNvbnRhY3RZb3VIZDoiTm8gcHVl ZGUgc2VyIGHDsWFkaWRvIGEgdHVzIEFtaWdvcyIsY29udGFjdFlvdUJkOiJObyBw dWVkZXMgc2VyIHN1IEZhbiIscmVtb3ZlRmFuSGQ6IkhlbW9zIGJvcnJhZG8gdHVz IGZhbnMiLHJlbW92ZUZhbkJkOiJIZW1vcyBib3JyYWRvIHR1cyBmYW5zIixjb250 YWN0Q2FudEhkOiJObyBwdWVkZSBzZXIgYcOxYWRpZG8gYSB0dXMgQW1pZ29zIixj b250YWN0Q2FudEJkOiJObyBwdWVkZXMgYcOxYWRpciBhIGVzdGUgdXN1YXJpbyBh IHR1IGxpc3RhIGRlIGNvbnRhY3RvcyBlbiBlc3RlIG1vbWVudG8uIixibG9ja0xp bWl0SGQ6IkhhcyBhbGNhbnphZG8gZWwgbMOtbWl0ZSBkZSBVc3VhcmlvcyBCbG9x dWVhZG9zIixibG9ja0xpbWl0QmQ6IkxvIHNlbnRpbW9zLCBoYXMgbGxlZ2FkbyBh bCBsw61taXRlIGRlIDIwMCBVc3VhcmlvcyBCbG9xdWVhZG9zLiAgTmVjZXNpdGFy w6FzIDxhIGhyZWY9XCIvbXkvY29udGFjdHMvY29ubmVjdGlvbnMvXCI+Ym9ycmFy IHBlcnNvbmFzIGRlIHR1IGxpc3RhIGRlIFVzdWFyaW9zIEJsb3F1ZWFkb3M8L2E+ IHBhcmEgcG9kZXIgYcOxYWRpciBtw6FzIHVzdWFyaW9zIn07WUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLmFuc3dlcnNDb21wYWN0PXtoaWRlOiJPY3VsdGFyIixz aG93OiJWZXIiLGxvd1JhdGluZzoiVMO6IGRpc3RlIGEgZXN0YSByZXNwdWVzdGEg dW5hIHB1bnR1YWNpw7NuIGJhamEifTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMuc2VvVGh1bWJzPXtidXR0b25MYWJlbDoiRm9ybXVsYXIgdW5hIHByZWd1bnRh Iix0ZXh0QXJlYUJMYWJlbDoiwr9Fc3RvIG5vIGVzIGxvIHF1ZSBlc3RhYmFzIGJ1 c2NhbmRvPyIsdGV4dEFyZWFTTGFiZWw6IlBsYW50ZWEgdHUgcHJlZ3VudGEgYSBs YSBjb211bmlkYWQgZGUgUmVzcHVlc3RhcyIsdGhhbmtzTXNnOiIlYm9sZCVHcmFj aWFzLiVlbmRfYm9sZCUgJWElUmVnw61zdHJhdGUgZW4gUmVzcHVlc3RhcyVlbmRf YSUgcGFyYSBlbXBlemFyIGEgaGFjZXIgdHVzIHByb3BpYXMgcHJlZ3VudGFzIix0 aGFua3NNc2dMZ2RJbjoiR3JhY2lhcyBwb3IgYXl1ZGFybm9zIGEgbWVqb3JhciBs YXMgYsO6c3F1ZWRhcyBlbiBSZXNwdWVzdGFzIixsaW1pdDoiMTEwIn07WUFIT08u U2VhcmNoLkFuc3dlcnMubGFiZWxzLmludGVyZXN0aW5nTGlzdD17bm9TdGFyczoi wqFTw6kgZWwgcHJpbWVybyBlbiBkZXN0YWNhciBlc3RhIHByZWd1bnRhISIseW91 OiJUw7oiLGNvdW50U2luZ2xlOiIlU1RBUl9DT1VOVCUgUGVyc29uYSBoYWxsw7Mg ZXN0byBpbnRlcmVzYW50ZS4iLGNvdW50UGx1cmFsOiIlU1RBUl9DT1VOVCUgR2Vu dGUgaGFsbMOzIGVzdG8gaW50ZXJlc2FudGUuIn07WUFIT08uU2VhcmNoLkFuc3dl cnMubGFiZWxzLmNvbmZpcm1hdGlvbnM9eyd5YW4tZGVsZXRlLXF1ZXN0aW9uJzoi wr9Fc3TDoXMgc2VndXJvIGRlIHF1ZSBkZXNlYXMgZWxpbWluYXIgZXN0YSBwcmVn dW50YT9cbiIsJ3lhbi1kZWxldGUtYW5zd2VyJzoiwr9Fc3TDoXMgc2VndXJvPyBO byBwb2Ryw6FzIGVudmlhciBvdHJhIHJlc3B1ZXN0YSBwYXJhIGVzdGEgbWlzbWEg cHJlZ3VudGEuXG5cblBhcmEgbW9kaWZpY2FyIGVzdGEgcmVzcHVlc3RhOlxuMS4g SGF6IGNsaWMgZW4gXCJDYW5jZWxhclwiLlxuMi4gQSBjb250aW51YWNpw7NuLCBk ZWJlcyBpciBhIGxhIHJlc3B1ZXN0YSB5IGhhY2VyIGNsaWMgZW4gZWwgZW5sYWNl IFwiRWRpdGFyXCIgcXVlIGFwYXJlY2UgZGViYWpvLiIsJ2RlbGV0ZS1jb21tZW50 Jzoiwr9Fc3TDoXMgc2VndXJvIGRlIHF1ZSBxdWllcmVzIGJvcnJhciB0dSBjb21l bnRhcmlvPyJ9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5zcGVsbENoZWNr ZXI9e3VzZUxhbmc6ImVzX0VTIixidXR0b25DaGFuZ2U6Ik1vZGlmaWNhciIsYnV0 dG9uRG9uZToiSGVjaG8iLGJ1dHRvbklnbm9yZToiSWdub3JhciIsbXNnTm9NaXN0 YWtlczoiTm8gc2UgaGFuIGVuY29udHJhZG8gZXJyb3JlcyIsbXNnTm9Nb3JlOiJO byBoYXkgbcOhcyBlcnJvcmVzIixsYWJlbENoYW5nZToiQ2FtYmlhciBwb3I6Iixs YWJlbFN1Z2dlc3Rpb246IlN1Z2VyZW5jaWFzOiIsbGFiZWxDaGVjazoiQ29tcHJv YmFyIGxhIG9ydG9ncmFmw61hIn07WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxz LnF1YWxpdHlUaXBzPXt9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5xdWFs aXR5VGlwcy5kZWZhdWx0TGFiZWxzPXtpc3N1ZVNob3J0OlsiUGFyZWNlIHVuIHBv Y28gYnJldmUuLi4gwr9Qb3IgcXXDqSBubyBpbnRlbnRhcyBhw7FhZGlyIG3DoXMg ZGF0b3M/Il0saXNzdWVDYXBzOlsiJW9wZW5Cb2xkJcK/VGUgaGFzIGRlamFkbyBs YXMgbWF5w7pzY3VsYXMgcHVlc3Rhcz8lY2xvc2VCb2xkJSBPdHJhcyBwZXJzb25h cyBwdWVkZW4gcGVuc2FyIHF1ZSBncml0YXMgc2kgZXNjcmliZXMgZW4gbWF5w7pz Y3VsYXMuIl0saXNzdWVTcGVsbGluZzpbIiVvcGVuQm9sZCXCoVV5ISVjbG9zZUJv bGQlIFBhcmVjZSBxdWUgaGF5ICVvcGVuQm9sZCUlY291bnQlJWNsb3NlQm9sZCUg ZXJyb3JlcyBvcnRvZ3LDoWZpY29zLiIsIkFicmlyIGVsIGNvcnJlY3RvciBvcnRv Z3LDoWZpY28iXSxpc3N1ZVNwZWxsaW5nT3BlbjpbIlBvciBmYXZvciwgcmV2aXNh IGxhIG9ydG9ncmFmw61hLiJdLGlzc3VlU3BlbGxpbmdDb21wbGV0ZTpbIk5vIGhh eSBtw6FzIGZhbHRhcyBkZSBvcnRvZ3JhZsOtYS4iXSxpc3N1ZVB1bmN0dWF0aW9u OlsiTW1tbS4uLiBQYXJlY2UgcXVlIGVzdMOhcyB1dGlsaXphbmRvIGRlbWFzaWFk b3Mgc2lnbm9zIGRlIHB1bnR1YWNpw7NuLiJdfTtZQUhPTy5TZWFyY2guQW5zd2Vy cy5sYWJlbHMucXVhbGl0eVRpcHMucXVlc3Rpb25UaXRsZT17aXNzdWVTaG9ydDpb IlR1IHByZWd1bnRhIGVzIGRlbWFzaWFkbyBjb3J0YS4gwr9Qb3IgcXXDqSBubyBh w7FhZGVzIG3DoXMgaW5mb3JtYWNpw7NuPyIsIiVvcGVuQm9sZCVDb25zZWpvJWNs b3NlQm9sZCU6IEhheiBwcmVndW50YXMgcGFyYSBzYWJlciBcIiVvcGVuQm9sZCVx dWnDqW4lY2xvc2VCb2xkJSwgJW9wZW5Cb2xkJXF1w6klY2xvc2VCb2xkJSwgJW9w ZW5Cb2xkJWN1w6FuZG8lY2xvc2VCb2xkJSwgJW9wZW5Cb2xkJWTDs25kZSVjbG9z ZUJvbGQlLCAlb3BlbkJvbGQlcG9yIHF1w6klY2xvc2VCb2xkJSBvICVvcGVuQm9s ZCVjw7NtbyVjbG9zZUJvbGQlXCIuIl0saXNzdWVMb25nOlsiSGFzIGV4Y2VkaWRv IGVsIGzDrW1pdGUgZGUgNS4wMDAgY2FyYWN0ZXJlcy4gUG9yIGZhdm9yIGVkaXRh IHR1cyBkZXRhbGxlcy4iXSxpc3N1ZVNwZWxsaW5nT3BlbjpbIiVvcGVuQm9sZCVD b25zZWpvOiVjbG9zZUJvbGQlIFV0aWxpemFuZG8gdW5hIGdyYW3DoXRpY2EgeSB1 bmEgb3J0b2dyYWbDrWEgY29ycmVjdGFzLCBjb25zZWd1aXLDoXMgcXVlIHNlYSBt w6FzIGbDoWNpbCBwYXJhIGxvcyBkZW3DoXMgY29udGVzdGFyIHR1IHByZWd1bnRh LiJdLGlzc3VlUHVuY3R1YXRpb246WyJNbW1tLi4uIFBhcmVjZSBxdWUgaGFzIHV0 aWxpemFkbyBkZW1hc2lhZG9zIHNpZ25vcyBkZSBwdW50dWFjacOzbi4gwr9Qb3Ig cXXDqSBubyByZXZpc2FzIHR1IHByZWd1bnRhPyJdLGlzc3VlQ2FwczpbIiVvcGVu Qm9sZCXCv1RlIGhhcyBkZWphZG8gbGFzIG1hecO6c2N1bGFzIHB1ZXN0YXM/JWNs b3NlQm9sZCUgU2kgdXRpbGl6YXMgc8OzbG8gbWF5w7pzY3VsYXMsIHB1ZWRlIHBh cmVjZXIgcXVlIGVzdMOhcyBHUklUQU5ETy4gSW50ZW50YSB1dGlsaXphciBjb3Jy ZWN0YW1lbnRlIG1hecO6c2N1bGFzIHkgbWluw7pzY3VsYXMgcGFyYSBtZWpvcmFy IGxhIGNhbGlkYWQgZGUgdHUgcHJlZ3VudGEuIl0saXNzdWVTaW1pbGFyOlsiJW9w ZW5Cb2xkJcKhRXNwZXJhISVjbG9zZUJvbGQlIFBhcmVjZSBxdWUgeWEgdGVuZW1v cyBsYSByZXNwdWVzdGEgcXVlIGVzdMOhcyBidXNjYW5kbzoiXX07WUFIT08uU2Vh cmNoLkFuc3dlcnMubGFiZWxzLnF1YWxpdHlUaXBzLmFuc3dlcj17aXNzdWVQdW5j dHVhdGlvbjpbIiVvcGVuQm9sZCXCoUV5ISVjbG9zZUJvbGQlIEVzdMOhcyB1dGls aXphbmRvIGRlbWFzaWFkb3Mgc2lnbm9zIGRlIHB1bnR1YWNpw7NuLiDCv1BvciBx dcOpIG5vIHJldmlzYXMgdHUgcmVzcHVlc3RhPyJdLGlzc3VlQ2FwczpbIiVvcGVu Qm9sZCXCv1RlIGhhcyBkZWphZG8gbGFzIG1hecO6c2N1bGFzIHB1ZXN0YXM/JWNs b3NlQm9sZCUgU2kgdXRpbGl6YXMgc8OzbG8gbWF5w7pzY3VsYXMsIHB1ZWRlIHBh cmVjZXIgcXVlIGVzdMOhcyBHUklUQU5ETy4gSW50ZW50YSB1dGlsaXphciBjb3Jy ZWN0YW1lbnRlIG1hecO6c2N1bGFzIHkgbWluw7pzY3VsYXMgcGFyYSBtZWpvcmFy IGxhIGNhbGlkYWQgZGUgdHUgcHJlZ3VudGEuIl0saXNzdWVTcGVsbGluZ09wZW46 WyIlb3BlbkJvbGQlQ29uc2VqbzolY2xvc2VCb2xkJSBBdW1lbnRhIGxhcyBwb3Np YmlsaWRhZGVzIGRlIHF1ZSB0dSByZXNwdWVzdGEgc2VhIGVsZWdpZGEgY29tbyBs YSBtZWpvciBjb3JyaWdpZW5kbyBsYSBvcnRvZ3JhZsOtYS4iXX07WUFIT08uU2Vh cmNoLkFuc3dlcnMubGFiZWxzLnF1YWxpdHlUaXBzLmFuc3dlckdyb3VwPXtkZWZh dWx0X3RpcDpbIiVvcGVuQm9sZCVDb25zZWpvOiVjbG9zZUJvbGQlIE9idMOpbiA1 IHB1bnRvcyBleHRyYXMgcG9yIHJlcHJlc2VudGFyIHVuIGdydXBvIGN1YW5kbyBj b250ZXN0YXMuIl19O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5xdWFsaXR5 VGlwcy5ncm91cERlc2NyaXB0aW9uPXtkZWZhdWx0X3RpcDpbIiVvcGVuQm9sZCVD b25zZWpvOiVjbG9zZUJvbGQlIFVuYSBkZXNjcmlwY2nDs24gaW50ZXJlc2FudGUg eSBwcmVjaXNhIGFsZW50YXLDoSBhIG3DoXMgcGVyc29uYXMgYSB1bmlyc2UgYSB0 dSBncnVwby4iXX07WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnF1YWxpdHlU aXBzLmdyb3VwRGVmYXVsdD17ZGVmYXVsdF90aXA6WyIlb3BlbkJvbGQlQ29uc2Vq bzolY2xvc2VCb2xkJSDCv1F1aWVyZXMgbcOhcyBpbmZvcm1hY2nDs24gc29icmUg Y8OzbW8gY3JlYXIgdW4gZ3J1cG8/IExlZSBsYXMgJU9QRU5fTElOS19HUk9VUF9H VUlERUxJTkVTJU5vcm1hcyBkZSBHcnVwb3MuJUNMT1NFX0xJTkslIl0sZ3VpZGVs aW5lc19saW5rOiIgVVJMLmdyb3Vwc19ndWlkZWxpbmVzIn07WUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLm11bHRpU2VsZWN0PXtwcmVzZXQ6IlRvZG9zICIsdG9w TGFiZWw6IlNlbGVjY2lvbmEgdW5hIGNhdGVnb3LDrWEiLHNlY29uZExhYmVsOiJT ZWxlY2Npb25hIHVuYSBzdWJjYXRlZ29yw61hIGRlbnRybyBkZSAlQ0FURUdPUlkl IixzZWxlY3RlZENhdGVnb3J5OiJIYXMgc2VsZWNjaW9uYWRvOiAlT1BFTl9FTVBI QVNJUyUlQ0FURUdPUlklJUNMT1NFX0VNUEhBU0lTJSJ9O1lBSE9PLlNlYXJjaC5B bnN3ZXJzLmxhYmVscy5wcm9maWxlUmVnaXN0cmF0aW9uPXtsYWJlbENoYW5nZToi TW9kaWZpY2FyIGVsIGNvcnJlbyBlbGVjdHLDs25pY28ifTtZQUhPTy5TZWFyY2gu QW5zd2Vycy5sYWJlbHMuZWRpdEFib3V0WW91PXtkZWZhdWx0VGV4dDoiQ3VlbnRh IGFsZ28gbcOhcyBzb2JyZSB0aSBhIGxhIGNvbXVuaWRhZCBkZSBSZXNwdWVzdGFz LiDCv0EgcXXDqSB0ZSBkZWRpY2FzPyDCv0N1w6FsZXMgc29uIHR1cyBpbnRlcmVz ZXM/IMK/Q3XDoWwgaGEgc2lkbyBlbCDDumx0aW1vIGxpYnJvIHF1ZSBoYXMgbGXD rWRvPyJ9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5saW1pdENoYXJhY3Rl cnM9e3N0YXR1c0NvdW50OiJRdWVkYW4gJWNvdW50JSBjYXJhY3RlcmVzLiJ9O1lB SE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5hdWRpb0NhcHRjaGE9e3BsYXlUZXh0 OiJSZXByb2R1Y2lyIGVsIGPDs2RpZ28gZW4gYXVkaW8iLHByb2JsZW1zOiJFeGlz dGUgdW5hIHZlcnNpw7NuIGF1ZGlvIGRlbCBjw7NkaWdvLiBIYXogY2xpYyBlbiBl bCBlbmxhY2UgXCJSZXByb2R1Y2lyIGVsIGPDs2RpZ28gZW4gYXVkaW9cIi4gU2kg c2lndWVzIHRlbmllbmRvIHByb2JsZW1hcywgY29udMOhY3Rhbm9zIGVuIGVzdGUg ICV2aXBfYXNzaXN0YW5jZSVmb3JtdWxhcmlvJXZpcF9hc3Npc3RhbmNlJSJ9O1lB SE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5zaW1pbGFyUXVlc3Rpb25zPXt0aXRs ZToiUHJlZ3VudGFzIHNpbWlsYXJlcyIsYW5zd2VyQ291bnQ6IjEgcmVzcHVlc3Rh IixhbnN3ZXJDb3VudFBsdXJhbDoiJUNPVU5UJSByZXNwdWVzdGFzIn07WUFIT08u U2VhcmNoLkFuc3dlcnMubGFiZWxzLmdyb3Vwcz17YWRkU3VjY2Vzc01zZzoiJW9w ZW5Cb2xkJVN1Y2Nlc3MhJWNsb3NlQm9sZCUgVGhlIHF1ZXN0aW9uIGhhcyBiZWVu IGFkZGVkIHRvOiIscmVtb3ZlU3VjY2Vzc01zZzoiJW9wZW5Cb2xkJUdyYWNpYXMu JWNsb3NlQm9sZCUgTGEgcHJlZ3VudGEgeWEgZnVlIHJlbW92aWRhIGRlOiIsYWRk RXJyb3JNc2c6IiVvcGVuQm9sZCVFcnJvciElY2xvc2VCb2xkJSBUaGVyZSB3YXMg YW4gZXJyb3IgYWRkaW5nIHlvdXIgcXVlc3Rpb24gdG86IixyZW1vdmVFcnJvck1z ZzoiJW9wZW5Cb2xkJcKhRXJyb3IhJWNsb3NlQm9sZCUgU2UgcHJvZHVqbyB1biBl cnJvciBhbCBlbGltaW5hciB0dSBwcmVndW50YSBkZToiLGxlYXJuTW9yZUFib3V0 OiJMZWFybiBtb3JlIGFib3V0IGdyb3VwcyBvbiBBbnN3ZXJzLiIsaW5Ob0dyb3Vw c1lldDoiVGhpcyBxdWVzdGlvbiBpc24ndCBmZWF0dXJlZCBpbiBhbnkgZ3JvdXBz IHlldCIsZmVhdHVyZWRJbjoiVGhpcyBxdWVzdGlvbiBpcyBmZWF0dXJlZCBpbiB0 aGUgZm9sbG93aW5nIGdyb3VwczoiLHJlbW92ZUxpbmtUaXRsZToicmVtb3ZlIHRo aXMgcXVlc3Rpb24gZnJvbSB0aGUgZ3JvdXAiLHJlbW92ZUxpbmtUZXh0OiIoUmVt b3ZlKSIsbm9JdGVtczoiU29ycnksIG5vdGhpbmcgaGVyZSIsbmV3bHlBZGRlZDoi bnVldm8ifTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuZ3JvdXBJbnZpdGF0 aW9uPXtpbnZpdGVUZXh0OiJJbnZpdGEgYSBtw6FzIHBlcnNvbmFzIn07WUFIT08u U2VhcmNoLkFuc3dlcnMubGFiZWxzLmNvbnRhY3RzUGFnaW5hdGlvbj17bmV4dFRl eHQ6InNpZ3VpZW50ZSIscHJldmlvdXNUZXh0OiJhbnRlcmlvciIscmVzdWx0VGV4 dDoicmVzdWx0YWRvIixyZXN1bHRzVGV4dDoicmVzdWx0YWRvcyJ9O1lBSE9PLlNl YXJjaC5BbnN3ZXJzLmxhYmVscy5yYXRpbmdzQ2hhcnQ9e307WUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLnJhdGluZ3NDaGFydC5yYXRpbmdzPVsiQWNjdXJhdGUi LCJIZWxwZnVsIiwiRGVzdGFjYWRhIiwiVmVyeSBUaG9yb3VnaCIsIkluY29tcGxl dGUiLCJOZWVkcyBVcGRhdGluZyJdO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVs cy5yYXRpbmdzQ2hhcnQub3RoZXI9Ik90cm8iO1lBSE9PLlNlYXJjaC5BbnN3ZXJz LmxhYmVscy5sZWdhY3lXaWRnZXQ9e3Rvb19sb25nOiJUdSBub21icmUgdGllbmUg cXVlIHRlbmVyICVPUEVOX0JPTEQlYWwgbWVub3MlQ0xPU0VfQk9MRCUgJU9QRU5f Qk9MRCUlQ0hBUkFDVEVSX0xJTUlUJSVDTE9TRV9CT0xEJSBjYXJhY3RlcmVzLiIs bm90X3Byb3ZpZGVkOiJUaWVuZXMgcXVlIGludHJvZHVjaXIgdW4gJU9QRU5fQk9M RCVhbGlhcyVDTE9TRV9CT0xEJSBwYXJhIGNvbnRpbnVhci4iLGludmFsaWQ6Ik5v IGhlbW9zIHBvZGlkbyBndWFyZGFyIHR1cyBkYXRvcyBlbiBlc3RlIG1vbWVudG8u IEVzIHBvc2libGUgcXVlIGVzdMOpIG9jdXJyaWVuZG8gdW4gcHJvYmxlbWEuIMK/ RXMgbmVjZXNhcmlvIHF1ZSBlY2hlbW9zIHVuIHZpc3Rhem8gYSBhbGdvPyAlT1BF Tl9MSU5LX0ZPUlVNJUF2w61zYW5vcyVDTE9TRV9MSU5LJSIsZm9ydW1fbGluazoi aHR0cDovL2Jsb2cuMzYwLnlhaG9vLmNvbS95X3Jlc3B1ZXN0YXNfdGVhbV9lcyJ9 O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5lZGl0U2V0dGluZ3M9e2VkaXRO b3RTYXZlZDoiSGFzIGhlY2hvIGNhbWJpb3MgZW4gdHUgY29uZmlndXJhY2nDs24g eSBzaSBjb250aW7DumFzIGVzdG9zIGNhbWJpb3Mgbm8gc2Vyw6FuIGd1YXJkYWRv cy4iLGNvbnRpbnVlU2F2ZToiU2VndWlyIHkgZ3VhcmRhciBkYXRvcy4ifTtZQUhP Ty5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc3VnZ2VzdGVkUXVlc3Rpb25zPXtub1F1 ZXN0aW9uczoiTG8gc2VudGltb3MsIG5vIHRlbmVtb3MgbcOhcyBwcmVndW50YXMg cXVlIG9mcmVjZXJ0ZSBwb3IgZWwgbW9tZW50by4uLiBQcnVlYmEgbGEgcHLDs3hp bWEgdmV6IHF1ZSBjb250ZWN0ZXMuIn07WUFIT08uU2VhcmNoLkFuc3dlcnMubGFi ZWxzLmNhdGVnb3J5V2lkZ2V0PXtwbGVhc2VTZWxlY3Q6IiBQb3IgZmF2b3IgZWxp Z2UiLGFsbFN1YkNhdGVnb3JpZXM6IiBUb2RhcyBsYXMgc3ViLWNhdGVnb3LDrWFz Iixub1N1YkNhdGVnb3JpZXM6IiBObyBzdWItY2F0ZW9nb3LDrWFzIixsb2FkaW5n Q2F0ZWdvcmllczoiIENhcmdhbmRvIGxhcyBDYXRlZ29yw61hcyIsZXJyb3JMb2Fk aW5nQ2F0ZWdvcmllczoiIEVycm9yIGFsIGNhcmdhciBsYXMgY2F0ZWdvcsOtYXMi fTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc2VhcmNoRm9ybT17ZGVmYXVs dFRleHQ6IiDCv1F1w6kgZXN0w6FzIGJ1c2NhbmRvPyIsZW50ZXJTZWFyY2hUZXJt czoiIFBvciBmYXZvciBpbnRyb2R1Y2UgbG9zIHTDqXJtaW5vcyBkZSB0dSBiw7pz cXVlZGEgYXF1w60iLGNvbmZpcm1hdGlvbjoiwr9Fc3TDoXMgc2VndXJvIGRlIHF1 ZXJlciBlbGltaW5hciBhIFwiJU5BTUUlXCI/Iix0cmVuZGluZ0NvbmZpcm1hdGlv bjoiw4lzdGEgYsO6c3F1ZWRhIHV0aWxpemFyIGxvcyB0ZW1hcyBtw6FzIHJlbGV2 YW50ZXMgZGVudHJvIGRlIFlhaG9vISBlbiBlc3RlIG1vbWVudG8uIFNpIGVsaW1p bmFzIMOpc3RhIGLDunNxdWVkYSBndWFyZGFkYSwgbm8gcG9kcsOhcyBjcmVhciB1 dHJhIHV0aWxpemFuZG8gbG9zIHRlbWFzIHJlbGV2YW50ZXMgZGUgWWFob28hLiJ9 O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jb250ZW50TG9hZGVyPXtkZWZh dWx0VGV4dDoiTG9hZGluZyByZXN1bHRz4oCmIn07WUFIT08uU2VhcmNoLkFuc3dl cnMubGFiZWxzLnB1bGxSZWZyZXNoPXtwdWxsOiJEZXNwbGllZ2EgcGFyYSByZWZy ZXNjYXIiLHJlbGVhc2U6IkxpYmVyYSBwYXJhIHJlZnJlc2NhciIscmVmcmVzaDoi UmVmcmVzY2FuZG8ifTtZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMudmlkZW9F bmRTY3JlZW49e2hlYWRlcjoiwr9Fc3TDoXMgbGlzdG8gcGFyYSBwYXJ0aWNpcGFy PyIsYnV0dG9uOiJDb21pZW56YSIscGxheToiUGxheSBWaWRlbyJ9O1lBSE9PLlNl YXJjaC5BbnN3ZXJzLmN0YT1mdW5jdGlvbigpe3ZhciB0cmFja2luZz1bXTtmdW5j dGlvbiBjaGFuZ2VUcmFja2luZyhlbCl7aWYodHJhY2tpbmdbZWwuaWRdKXtlbC5m b3JtLmFjdGlvbj10cmFja2luZ1tlbC5pZF07fX0KZnVuY3Rpb24gZml4U3VibWl0 KGUpe1lBSE9PLnV0aWwuRXZlbnQucHJldmVudERlZmF1bHQoZSk7dmFyIGZvcm09 dGhpcy5mb3JtO2lmKFlBSE9PLmVudi51YS5pZT4wKXt2YXIgZWxzPWZvcm0uZ2V0 RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO2lmKGVscy5sZW5ndGg+MCl7Zm9y KHZhciBpPTAsbD1lbHMubGVuZ3RoO2k8bDtpKyspe2lmKGVsc1tpXSE9PXRoaXMp e2Vsc1tpXS5kaXNhYmxlZD10cnVlO319fX0KZWxzZXt2YXIgaW5wdXQ9ZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtpbnB1dC50eXBlPSdoaWRkZW4nO2lu cHV0Lm5hbWU9dGhpcy5uYW1lO2lucHV0LnZhbHVlPXRoaXMudmFsdWU7Zm9ybS5h cHBlbmRDaGlsZChpbnB1dCk7fQpjaGFuZ2VUcmFja2luZyh0aGlzKTtmb3JtLnN1 Ym1pdCgpO30KZnVuY3Rpb24gY29udmVydChlbCl7dmFyIHN0YXJ0Q29udGVudD0n PHNwYW4+PHNwYW4+PHNwYW4+PHNwYW4+Jzt2YXIgZW5kQ29udGVudD0nPFwvc3Bh bj48XC9zcGFuPjxcL3NwYW4+PFwvc3Bhbj4nO2lmKGVsLm5vZGVOYW1lLnRvTG93 ZXJDYXNlKCk9PT0naW5wdXQnJiZlbC50eXBlLnRvTG93ZXJDYXNlKCk9PT0nc3Vi bWl0Jyl7dmFyIGJ1dHRvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24n KTtidXR0b24uY2xhc3NOYW1lPWVsLmNsYXNzTmFtZTtidXR0b24ubmFtZT1lbC5u YW1lO2J1dHRvbi52YWx1ZT1lbC52YWx1ZTtidXR0b24uaWQ9ZWwuaWQ7aWYoWUFI T08udXRpbC5Eb20uaGFzQ2xhc3MoZWwsJ2Rpc2FibGVkJykpe2J1dHRvbi5kaXNh YmxlZD10cnVlO30KYnV0dG9uLmlubmVySFRNTD1zdGFydENvbnRlbnQrZWwudmFs dWUrZW5kQ29udGVudDtlbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChidXR0b24s ZWwpO1lBSE9PLnV0aWwuRXZlbnQub24oYnV0dG9uLCdjbGljaycsZml4U3VibWl0 KTtZQUhPTy51dGlsLkV2ZW50Lm9uKGJ1dHRvbiwnY2xpY2snLGZ1bmN0aW9uKGUp e3ZhciB0YXJnZXQ9WUFIT08udXRpbC5FdmVudC5nZXRUYXJnZXQoZSk7WUFIT08u dXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChlKTtZQUhPTy51dGlsLkRvbS5hZGRD bGFzcyh0YXJnZXQsJ2NsaWNrJyk7Y2hhbmdlVHJhY2tpbmcodGFyZ2V0KTt0aGlz LmZvcm0uc3VibWl0KCk7fSk7aWYoWUFIT08uZW52LnVhLmllPjApe1lBSE9PLnV0 aWwuRXZlbnQub24oYnV0dG9uLCdtb3VzZWVudGVyJyxmdW5jdGlvbihlKXtZQUhP Ty51dGlsLkRvbS5hZGRDbGFzcyh0aGlzLCdob3ZlcicpO30pO1lBSE9PLnV0aWwu RXZlbnQub24oYnV0dG9uLCdtb3VzZWxlYXZlJyxmdW5jdGlvbihlKXtZQUhPTy51 dGlsLkRvbS5yZW1vdmVDbGFzcyh0aGlzLCdob3ZlcicpO30pO1lBSE9PLnV0aWwu RXZlbnQub24oYnV0dG9uLCdmb2N1cycsZnVuY3Rpb24oZSl7WUFIT08udXRpbC5E b20uYWRkQ2xhc3ModGhpcywnaG92ZXInKTt9KTtZQUhPTy51dGlsLkV2ZW50Lm9u KGJ1dHRvbiwnYmx1cicsZnVuY3Rpb24oZSl7WUFIT08udXRpbC5Eb20ucmVtb3Zl Q2xhc3ModGhpcywnaG92ZXInKTt9KTt9fX0KcmV0dXJue2luaXQ6ZnVuY3Rpb24o KXt2YXIgZWxzPVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUo J2N0YS1idXR0b24nLCdpbnB1dCcpO2lmKGVscy5sZW5ndGg+MCl7Zm9yKHZhciBp PTAsbD1lbHMubGVuZ3RoO2k8bDtpKyspe2NvbnZlcnQoZWxzW2ldKTt9fX0sY29u dmVydDpjb252ZXJ0LGFkZFRyYWNraW5nOmZ1bmN0aW9uKHJlZix1cmwpe3RyYWNr aW5nW3JlZl09dXJsO319O30oKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5tb3JlTGlz dD1mdW5jdGlvbigpe3ZhciBnQ3NzPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcyxj c3M9WUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLm1vcmVMaXN0LFl1ZD1ZQUhPTy51 dGlsLkRvbSxZdWU9WUFIT08udXRpbC5FdmVudDt2YXIgdG9nZ2xlPWZ1bmN0aW9u KGUpe1l1ZS5wcmV2ZW50RGVmYXVsdChlKTt2YXIgbGlzdD10aGlzLnBhcmVudE5v ZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29sJylbMF07aWYoWXVkLmhhc0NsYXNz KGxpc3QsZ0Nzcy5zaG93Q2xhc3MpKXtZdWQucmVtb3ZlQ2xhc3MobGlzdCxnQ3Nz LnNob3dDbGFzcyk7dGhpcy5pbm5lckhUTUw9dGhpcy5vbGRMYWJlbDt9ZWxzZXtZ dWQuYWRkQ2xhc3MobGlzdCxnQ3NzLnNob3dDbGFzcyk7dGhpcy5vbGRMYWJlbD10 aGlzLmlubmVySFRNTDt0aGlzLmlubmVySFRNTD1ZQUhPTy5TZWFyY2guQW5zd2Vy cy5sYWJlbHMuaGlkZUxhYmVsO30KdmFyIGxpbWl0PVlBSE9PLnV0aWwuRG9tLmdl dEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbWl0JywncCcsJ3lhbi1pbnRlcmVzdGlu Zy1tZW51Jyk7aWYobGltaXQubGVuZ3RoPjApe2lmKGxpbWl0WzBdLmlubmVySFRN TC5tYXRjaCgvXGI1MFxiLykpe2xpbWl0WzBdLmlubmVySFRNTD1saW1pdFswXS5p bm5lckhUTUwucmVwbGFjZSgvXGI1MFxiLywnMTInKTt9CmVsc2V7bGltaXRbMF0u aW5uZXJIVE1MPWxpbWl0WzBdLmlubmVySFRNTC5yZXBsYWNlKC9cYjEyXGIvLCc1 MCcpO319fTtyZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBsaXN0cz1ZQUhPTy5T ZWFyY2guQW5zd2Vycy5tb3JlbGlzdHM7Zm9yKHZhciBpPTA7bGlzdHNbaV07aSsr KXt2YXIgbGlzdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChsaXN0c1tpXS5pZCk7 aWYobGlzdCYmbGlzdC50YWdOYW1lIT09J09MJyl7bGlzdD1saXN0LmdldEVsZW1l bnRzQnlUYWdOYW1lKCdvbCcpWzBdO30KaWYobGlzdCl7dmFyIGl0PWxpc3QuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoJ2xpJyk7Zm9yKHZhciBqPTA7ajxsaXN0c1tpXS5h bW91bnQ7aisrKXtZdWQuYWRkQ2xhc3MoaXRbal0sZ0Nzcy5zaG93Q2xhc3MpO30K aWYoaXQubGVuZ3RoPmxpc3RzW2ldLmFtb3VudCl7dmFyIHRyaWdnZXI9ZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnYScpO1l1ZC5hZGRDbGFzcyh0cmlnZ2VyLFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5tb3JlTGlzdC5tb3JlQ2xhc3MpO3RyaWdnZXIu c2V0QXR0cmlidXRlKCdocmVmJywnIycpO2lmKGl0Lmxlbmd0aDxsaXN0c1tpXS5t YXgpe3RyaWdnZXIuaW5uZXJIVE1MPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVs cy5hbGxMYWJlbC5yZXBsYWNlKC8lY291bnQlLywnPHNwYW4+JytpdC5sZW5ndGgr Jzwvc3Bhbj4nKTt9CmVsc2V7dHJpZ2dlci5pbm5lckhUTUw9WUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLm1vcmVMYWJlbDt9Cmxpc3QucGFyZW50Tm9kZS5pbnNl cnRCZWZvcmUodHJpZ2dlcixsaXN0KTtZdWUub24odHJpZ2dlciwnY2xpY2snLHRv Z2dsZSk7fX19fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmFuc3dlcnNDb21w YWN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdG9nZ2xlKGUpe1lBSE9PLnV0aWwuRXZl bnQucHJldmVudERlZmF1bHQoZSk7aWYoWUFIT08udXRpbC5Eb20uaGFzQ2xhc3Mo dGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUsWUFIT08uU2VhcmNoLkFuc3dlcnMu Y3NzLmFuc3dlcnNDb21wYWN0LmhpZGVDbGFzcykpe1lBSE9PLnV0aWwuRG9tLnJl bW92ZUNsYXNzKHRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLFlBSE9PLlNlYXJj aC5BbnN3ZXJzLmNzcy5hbnN3ZXJzQ29tcGFjdC5oaWRlQ2xhc3MpO3RoaXMuaW5u ZXJIVE1MPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5hbnN3ZXJzQ29tcGFj dC5oaWRlO31lbHNle1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHRoaXMucGFyZW50 Tm9kZS5wYXJlbnROb2RlLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJz Q29tcGFjdC5oaWRlQ2xhc3MpO3RoaXMuaW5uZXJIVE1MPVlBSE9PLlNlYXJjaC5B bnN3ZXJzLmxhYmVscy5hbnN3ZXJzQ29tcGFjdC5zaG93O319CmZ1bmN0aW9uIGNv bGxhcHNlKGVsKXtZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyhlbCxZQUhPTy5TZWFy Y2guQW5zd2Vycy5jc3MuYW5zd2Vyc0NvbXBhY3QuaGlkZUNsYXNzKTtZQUhPTy51 dGlsLkRvbS5hZGRDbGFzcyhlbCxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYW5z d2Vyc0NvbXBhY3QuY29tcGFjdENsYXNzKTt2YXIgcD1ZQUhPTy51dGlsLkRvbS5n ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5h bnN3ZXJzQ29tcGFjdC50b2dnbGVDbGFzcywncCcsZWwpWzBdO3ZhciBkPXAuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoJ2EnKVswXTtpZighZCl7ZD1kb2N1bWVudC5jcmVh dGVFbGVtZW50KCdhJyk7ZC5ocmVmPSIjIjtwLmFwcGVuZENoaWxkKGQpO1lBSE9P LnV0aWwuRXZlbnQub24oZCwnY2xpY2snLHRvZ2dsZSk7fQpkLmlubmVySFRNTD1Z QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuYW5zd2Vyc0NvbXBhY3Quc2hvdzt9 CmZ1bmN0aW9uIGhhbmRsZVJhdGluZyh0eXBlLGFyZ3Mpe3ZhciBhbnN3ZXI9ZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnVz ZXJQcm9maWxlQ2FyZC5wcm9maWxlUHJlZml4K2FyZ3NbMF0pLnBhcmVudE5vZGU7 aWYoIVlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKGFuc3dlciwnYmVzdCcpKXtZQUhP Ty51dGlsLkRvbS5hZGRDbGFzcyhhbnN3ZXIsWUFIT08uU2VhcmNoLkFuc3dlcnMu Y3NzLmFuc3dlcnNDb21wYWN0LmNvbXBhY3RDbGFzcyk7dmFyIHA9WUFIT08udXRp bC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShZQUhPTy5TZWFyY2guQW5zd2Vy cy5jc3MuYW5zd2Vyc0NvbXBhY3QudG9nZ2xlQ2xhc3MsJ3AnLGFuc3dlcilbMF07 aWYoIXApe3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO3AuY2xhc3NOYW1l PSd0b2dnbGUnO2Fuc3dlci5pbnNlcnRCZWZvcmUocCxZQUhPTy51dGlsLkRvbS5n ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxYS1jb250YWluZXInLCdkaXYnLGFuc3dl cilbMF0pO30KaWYocC5maXJzdENoaWxkKXtwLmZpcnN0Q2hpbGQubm9kZVZhbHVl PVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5hbnN3ZXJzQ29tcGFjdC5sb3dS YXRpbmcrJyAnO30KZWxzZXtwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl eHROb2RlKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5hbnN3ZXJzQ29tcGFj dC5sb3dSYXRpbmcrJyAnKSk7fQpjb2xsYXBzZShhbnN3ZXIpO319CnJldHVybntp bml0OmZ1bmN0aW9uKCl7WUFIT08uU2VhcmNoLkFuc3dlcnMuYW5zd2VyUmF0ZURv d24uc3Vic2NyaWJlKGhhbmRsZVJhdGluZyk7dmFyIGFuc3dlcnM9WUFIT08udXRp bC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShZQUhPTy5TZWFyY2guQW5zd2Vy cy5jc3MuYW5zd2Vyc0NvbXBhY3QuY29tcGFjdENsYXNzLCdkaXYnKTtpZihhbnN3 ZXJzLmxlbmd0aD4wKXtZQUhPTy51dGlsLkRvbS5iYXRjaChhbnN3ZXJzLGNvbGxh cHNlKTt9fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmFuc3dlcnNSYXRpbmc9 ZnVuY3Rpb24oKXtmdW5jdGlvbiBoYW5kbGVSYXRpbmcoZSl7dmFyIE1FU1NBR0Vf RkFJTD0wO3ZhciBNRVNTQUdFX1NVQ0NFU1M9MTt2YXIgTUVTU0FHRV9MT0FESU5H PTI7ZnVuY3Rpb24gY2FsbGJhY2tTdWNjZXNzKG8pe3ZhciByZXNwb25zZT1ldmFs KCcoJytvLnJlc3BvbnNlVGV4dCsnKScpO2lmKHJlc3BvbnNlLmVycm9yKXtkaXNw bGF5TWVzc2FnZShZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuYW5zd2Vyc1Jh dGluZy5jb25uZWN0aW9uRXJyb3IsTUVTU0FHRV9GQUlMKTt9CmVsc2V7ZGlzcGxh eU1lc3NhZ2UoWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmFuc3dlcnNSYXRp bmcuc3VjY2VzcyxNRVNTQUdFX1NVQ0NFU1MpO319CmZ1bmN0aW9uIGNhbGxiYWNr RmFpbChvKXtkaXNwbGF5TWVzc2FnZShZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMuYW5zd2Vyc1JhdGluZy5jb25uZWN0aW9uRXJyb3IsTUVTU0FHRV9GQUlMKTt9 CmZ1bmN0aW9uIGRpc3BsYXlNZXNzYWdlKG1lc3NhZ2UsdHlwZSl7dmFyIG1zZz11 dGlscy5nZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpWzBdO2lmKCFtc2cpe21zZz1k b2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7fQppZih0eXBlPT09TUVTU0FHRV9T VUNDRVNTKXttc2cuY2xhc3NOYW1lPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5h bnN3ZXJzUmF0aW5nLnN1Y2Nlc3NDbGFzczt9CmVsc2UgaWYodHlwZT09PU1FU1NB R0VfRkFJTCl7bXNnLmNsYXNzTmFtZT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Mu YW5zd2Vyc1JhdGluZy5mYWlsdXJlQ2xhc3M7fQplbHNlIGlmKHR5cGU9PT1NRVNT QUdFX0xPQURJTkcpe21zZy5jbGFzc05hbWU9WUFIT08uU2VhcmNoLkFuc3dlcnMu Y3NzLmFuc3dlcnNSYXRpbmcubG9hZGluZ0NsYXNzO30KbXNnLmlubmVySFRNTD1t ZXNzYWdlO3V0aWxzLmFwcGVuZENoaWxkKG1zZyk7fQp2YXIgdGFyZ2V0PVlBSE9P LnV0aWwuRXZlbnQuZ2V0VGFyZ2V0KGUpO3doaWxlKHRhcmdldCYmdGFyZ2V0Lm5v ZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0nYScpe3RhcmdldD10YXJnZXQucGFyZW50 Tm9kZTt9CmlmKHRhcmdldCl7dmFyIHRhcmdldFBhcmVudD10YXJnZXQucGFyZW50 Tm9kZTt2YXIgdXRpbHM9dGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJl bnROb2RlO2lmKChZQUhPTy51dGlsLkRvbS5oYXNDbGFzcyh0YXJnZXQucGFyZW50 Tm9kZSxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYW5zd2Vyc1JhdGluZy5yYXRl VXBDbGFzcyl8fFlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKHRhcmdldC5wYXJlbnRO b2RlLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJzUmF0aW5nLnJhdGVE b3duQ2xhc3MpKSYmIVlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKHV0aWxzLFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJzUmF0aW5nLmRpc2FibGVkQ2xhc3Mp JiYhWUFIT08udXRpbC5Eb20uaGFzQ2xhc3ModXRpbHMsWUFIT08uU2VhcmNoLkFu c3dlcnMuY3NzLmFuc3dlcnNSYXRpbmcuZHluYW1pY0NsYXNzKSl7WUFIT08udXRp bC5FdmVudC5wcmV2ZW50RGVmYXVsdChlKTtZQUhPTy51dGlsLkRvbS5hZGRDbGFz cyh1dGlscyxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYW5zd2Vyc1JhdGluZy5k aXNhYmxlZENsYXNzKTt2YXIgYV90aHVtYnVwPVlBSE9PLnV0aWwuRG9tLmdldEVs ZW1lbnRzQnlDbGFzc05hbWUoWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmFuc3dl cnNSYXRpbmcucmF0ZVVwQ2xhc3MsJ2xpJyx0YXJnZXQucGFyZW50Tm9kZS5wYXJl bnROb2RlKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpWzBdO3ZhciBhX3Ro dW1iZG93bj1ZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFlB SE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJzUmF0aW5nLnJhdGVEb3duQ2xh c3MsJ2xpJyx0YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlKVswXS5nZXRFbGVt ZW50c0J5VGFnTmFtZSgnYScpWzBdO3RhcmdldC5nZXRFbGVtZW50c0J5VGFnTmFt ZSgnc3BhbicpWzBdLmZpcnN0Q2hpbGQubm9kZVZhbHVlPShwYXJzZUludCh0YXJn ZXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NwYW4nKVswXS5maXJzdENoaWxkLm5v ZGVWYWx1ZSwxMCkrMSkrJyAnO2lmKFlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKHRh cmdldC5wYXJlbnROb2RlLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJz UmF0aW5nLnJhdGVEb3duQ2xhc3MpKXtZQUhPTy5TZWFyY2guQW5zd2Vycy5hbnN3 ZXJSYXRlRG93bi5maXJlKHRhcmdldC5ocmVmLm1hdGNoKC90YXJnZXRLaWQ9KFte Jl0qKS8pWzFdKTt9CnZhciB1cmw9dGFyZ2V0LmhyZWYucmVwbGFjZSgvZG9uZT1b XiZdKiYvLCcnKTt2YXIgc190aHVtYnVwPWFfdGh1bWJ1cC5maXJzdENoaWxkO1lB SE9PLnV0aWwuRG9tLnJlbW92ZUNsYXNzKHNfdGh1bWJ1cCxZQUhPTy5TZWFyY2gu QW5zd2Vycy5jc3MuYW5zd2Vyc1JhdGluZy5yYXRlQnV0dG9uQ2xhc3MpO2lmKFlB SE9PLnV0aWwuRG9tLmhhc0NsYXNzKHRhcmdldFBhcmVudCxZQUhPTy5TZWFyY2gu QW5zd2Vycy5jc3MuYW5zd2Vyc1JhdGluZy5yYXRlVXBDbGFzcykpe1lBSE9PLnV0 aWwuRG9tLmFkZENsYXNzKHNfdGh1bWJ1cCxZQUhPTy5TZWFyY2guQW5zd2Vycy5j c3MuYW5zd2Vyc1JhdGluZy5yYXRlZENsYXNzKTt9CmFfdGh1bWJ1cC5wYXJlbnRO b2RlLnJlcGxhY2VDaGlsZChzX3RodW1idXAsYV90aHVtYnVwKTt2YXIgc190aHVt YmRvd249YV90aHVtYmRvd24uZmlyc3RDaGlsZDtZQUhPTy51dGlsLkRvbS5yZW1v dmVDbGFzcyhzX3RodW1iZG93bixZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYW5z d2Vyc1JhdGluZy5yYXRlQnV0dG9uQ2xhc3MpO2lmKFlBSE9PLnV0aWwuRG9tLmhh c0NsYXNzKHRhcmdldFBhcmVudCxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYW5z d2Vyc1JhdGluZy5yYXRlRG93bkNsYXNzKSl7WUFIT08udXRpbC5Eb20uYWRkQ2xh c3Moc190aHVtYmRvd24sWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmFuc3dlcnNS YXRpbmcucmF0ZWRDbGFzcyk7fQphX3RodW1iZG93bi5wYXJlbnROb2RlLnJlcGxh Y2VDaGlsZChzX3RodW1iZG93bixhX3RodW1iZG93bik7ZGlzcGxheU1lc3NhZ2Uo WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmFuc3dlcnNSYXRpbmcuc2F2aW5n LE1FU1NBR0VfTE9BRElORyk7dmFyIGNhbGxiYWNrPXtzdWNjZXNzOmNhbGxiYWNr U3VjY2VzcyxmYWlsdXJlOmNhbGxiYWNrRmFpbH07WUFIT08udXRpbC5Db25uZWN0 LmFzeW5jUmVxdWVzdCgnR0VUJyx1cmwsY2FsbGJhY2spO319fQpyZXR1cm57aW5p dDpmdW5jdGlvbigpe3ZhciB1dGlscz1ZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50 c0J5Q2xhc3NOYW1lKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJzUmF0 aW5nLnV0aWxDbGFzcywnZGl2Jyk7aWYodXRpbHMubGVuZ3RoPjApe1lBSE9PLnV0 aWwuRG9tLmJhdGNoKHV0aWxzLGZ1bmN0aW9uKGVsKXt2YXIgc3RhdHVzPVlBSE9P LnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoWUFIT08uU2VhcmNoLkFu c3dlcnMuY3NzLmFuc3dlcnNSYXRpbmcudGh1bWJDbGFzcywncCcsZWwucGFyZW50 Tm9kZSk7aWYoc3RhdHVzLmxlbmd0aD4wKXt2YXIgdGh1bWI9WUFIT08udXRpbC5E b20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShZQUhPTy5TZWFyY2guQW5zd2Vycy5j c3MuYW5zd2Vyc1JhdGluZy5yYXRlVXBDbGFzcywnbGknLGVsKTtpZih0aHVtYi5s ZW5ndGg+MCl7WUFIT08udXRpbC5FdmVudC5vbih0aHVtYlswXSwnY2xpY2snLGZ1 bmN0aW9uKGUpe1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHN0YXR1c1swXS5wYXJl bnROb2RlLCdzaG93Jyk7fSk7WUFIT08udXRpbC5Eb20uc2V0U3R5bGUodGh1bWJb MF0sJ2N1cnNvcicsJ3BvaW50ZXInKTt9CnRodW1iPVlBSE9PLnV0aWwuRG9tLmdl dEVsZW1lbnRzQnlDbGFzc05hbWUoWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmFu c3dlcnNSYXRpbmcucmF0ZURvd25DbGFzcywnbGknLGVsKTtpZih0aHVtYi5sZW5n dGg+MCl7WUFIT08udXRpbC5FdmVudC5vbih0aHVtYlswXSwnY2xpY2snLGZ1bmN0 aW9uKGUpe1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHN0YXR1c1swXS5wYXJlbnRO b2RlLCdzaG93Jyk7fSk7WUFIT08udXRpbC5Eb20uc2V0U3R5bGUodGh1bWJbMF0s J2N1cnNvcicsJ3BvaW50ZXInKTt9fX0pO1lBSE9PLnV0aWwuRXZlbnQub24odXRp bHMsJ2NsaWNrJyxoYW5kbGVSYXRpbmcpO319fTt9KCk7WUFIT08uU2VhcmNoLkFu c3dlcnMudXNlclByb2ZpbGVDYXJkPWZ1bmN0aW9uKCl7dmFyIGNhY2hlPVtdLGNh Y2hlZD1mYWxzZSxjQ3NzPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5jb250YWN0 TGlua3MsY3NzPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy51c2VyUHJvZmlsZUNh cmQsZmV0Y2hpbmdEYXRhPWZhbHNlLG5ldHdvcmtQcm9jZXNzaW5nPWZhbHNlLGhv dmVyVGltZXIsaG92ZXJPcGVuPWZhbHNlLGlkcz1bXSxkaXYsc3RhdENhcmQ9ZmFs c2UsWXVjPVlBSE9PLnV0aWwuQ29ubmVjdGlvbixZdWQ9WUFIT08udXRpbC5Eb20s WXVlPVlBSE9PLnV0aWwuRXZlbnQsbmV0d29ya01ldGhvZCxwcm9maWxlSWQsdXJs O2Z1bmN0aW9uIGNhbGxiYWNrU3VjY2VzcyhvKXt2YXIgcmVzcG9uc2U9ZXZhbCgn KCcrby5yZXNwb25zZVRleHQrJyknKTt2YXIgYXJnczt2YXIgbmlja25hbWU9WUFI T08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmNvbnRhY3RMaW5rcy5nZW5lcmljTmFt ZTt2YXIgcHJvZmlsZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChZQUhPTy5TZWFy Y2guQW5zd2Vycy5jc3MudXNlclByb2ZpbGVDYXJkLnByb2ZpbGVQcmVmaXgrcHJv ZmlsZUlkKTtpZihwcm9maWxlKXt2YXIgbmlja3M9WXVkLmdldEVsZW1lbnRzQnlD bGFzc05hbWUoJ2ZuJywnc3BhbicscHJvZmlsZSk7aWYobmlja3MubGVuZ3RoPT0w KXtuaWNrcz1wcm9maWxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoMScpO30KaWYo bmlja3MubGVuZ3RoPjApe25pY2tuYW1lPW5pY2tzWzBdLmlubmVySFRNTDt9CnZh ciBuZXR3b3Jrcz1ZdWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShZQUhPTy5TZWFy Y2guQW5zd2Vycy5jc3MuY29udGFjdExpbmtzLmNvbnRhY3RMaXN0LCd1bCcscHJv ZmlsZSk7aWYobmV0d29ya3MubGVuZ3RoPjApe3ZhciBuZXR3b3JrPW5ldHdvcmtz WzBdO30KdmFyIHJlZ2V4PW5ldyBSZWdFeHAoJyVuaWNrJScsJ2cnKTt2YXIgbXlC dXR0b25zPVt7dGV4dDpZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFj dExpbmtzLm9rYXksaGFuZGxlcjpmdW5jdGlvbigpe1lBSE9PLlNlYXJjaC5BbnN3 ZXJzLmNsb3NlQWxlcnQuZmlyZSgpO30saXNEZWZhdWx0OnRydWV9XTtzd2l0Y2go cmVzcG9uc2Upe2Nhc2UgMDppZihuZXR3b3JrTWV0aG9kPT09J2FkZEZyaWVuZCcp e2FyZ3M9e2hlYWRlcjpZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFj dExpbmtzLmFkZFN1Y2Nlc3NIZC5yZXBsYWNlKHJlZ2V4LG5pY2tuYW1lKSxib2R5 OllBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jb250YWN0TGlua3MuYWRkU3Vj Y2Vzcy5yZXBsYWNlKHJlZ2V4LG5pY2tuYW1lKSxmb290ZXI6bXlCdXR0b25zLGFk ZENsYXNzOidpY28tYmx1ZS1idWRkeSd9O25ldHdvcmsuaW5uZXJIVE1MPSc8bGk+ PGEgaHJlZj0iJyt1cmwucmVwbGFjZSgvYWRkRnJpZW5kLywncmVtb3ZlRnJpZW5k JykrJyI+JytZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtz LnJlbW92ZUNvbnRhY3QrJzwvYT48L2xpPic7WXVkLmFkZENsYXNzKHByb2ZpbGUs WUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmNvbnRhY3RMaW5rcy5pc0NvbnRhY3Qp O31lbHNlIGlmKG5ldHdvcmtNZXRob2Q9PT0ndW5CbG9ja1VzZXInKXthcmdzPXto ZWFkZXI6WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmNvbnRhY3RMaW5rcy5y QmxvY2tTdWNjZXNzSGQucmVwbGFjZShyZWdleCxuaWNrbmFtZSksYm9keTpZQUhP Ty5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtzLnJCbG9ja1N1Y2Nl c3MucmVwbGFjZShyZWdleCxuaWNrbmFtZSksZm9vdGVyOm15QnV0dG9ucyxhZGRD bGFzczonaWNvLWJsb2NrJ307bmV0d29yay5pbm5lckhUTUw9JzxsaT48YSBocmVm PSInK3VybC5yZXBsYWNlKC91bkJsb2NrVXNlci8sJ2FkZEZyaWVuZCcpKyciIGNs YXNzPSInK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5jb250YWN0TGlua3MuYWRk Q29udGFjdCsnIj4nK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jb250YWN0 TGlua3MuYWRkQ29udGFjdCsnPC9hPjwvbGk+JztuZXR3b3JrLmlubmVySFRNTCs9 JzxsaT48YSBocmVmPSInK3VybC5yZXBsYWNlKC91bkJsb2NrVXNlci8sJ2Jsb2Nr VXNlcicpKyciIGNsYXNzPSInK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5jb250 YWN0TGlua3MuYmxvY2tVc2VyKyciPicrWUFIT08uU2VhcmNoLkFuc3dlcnMubGFi ZWxzLmNvbnRhY3RMaW5rcy5ibG9ja0NvbnRhY3QrJzwvYT48L2xpPic7WXVkLnJl bW92ZUNsYXNzKHByb2ZpbGUsWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmNvbnRh Y3RMaW5rcy5pc0Jsb2NrZWQpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnJlbW92ZUNv bnRhY3QuZmlyZSh7cmVtb3ZlZENvbnRhY3Q6cHJvZmlsZX0pO31lbHNlIGlmKG5l dHdvcmtNZXRob2Q9PT0ncmVtb3ZlRnJpZW5kJyl7YXJncz17aGVhZGVyOllBSE9P LlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jb250YWN0TGlua3MucmVtb3ZlU3VjY2Vz c0hkLnJlcGxhY2UocmVnZXgsbmlja25hbWUpLGJvZHk6WUFIT08uU2VhcmNoLkFu c3dlcnMubGFiZWxzLmNvbnRhY3RMaW5rcy5yZW1vdmVTdWNjZXNzLnJlcGxhY2Uo cmVnZXgsbmlja25hbWUpLGZvb3RlcjpteUJ1dHRvbnMsYWRkQ2xhc3M6J2ljby1i bHVlLWJ1ZGR5J307bmV0d29yay5pbm5lckhUTUw9JzxsaT48YSBocmVmPSInK3Vy bC5yZXBsYWNlKC9yZW1vdmVGcmllbmQvLCdhZGRGcmllbmQnKSsnIiBjbGFzcz0i JytZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuY29udGFjdExpbmtzLmFkZENvbnRh Y3QrJyI+JytZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtz LmFkZENvbnRhY3QrJzwvYT48L2xpPic7bmV0d29yay5pbm5lckhUTUwrPSc8bGk+ PGEgaHJlZj0iJyt1cmwucmVwbGFjZSgvcmVtb3ZlRnJpZW5kLywnYmxvY2tVc2Vy JykrJyIgY2xhc3M9IicrWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmNvbnRhY3RM aW5rcy5ibG9ja1VzZXIrJyI+JytZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMu Y29udGFjdExpbmtzLmJsb2NrQ29udGFjdCsnPC9hPjwvbGk+JztZdWQucmVtb3Zl Q2xhc3MocHJvZmlsZSxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuY29udGFjdExp bmtzLmlzQ29udGFjdCk7WUFIT08uU2VhcmNoLkFuc3dlcnMucmVtb3ZlQ29udGFj dC5maXJlKHtyZW1vdmVkQ29udGFjdDpwcm9maWxlfSk7fWVsc2UgaWYobmV0d29y a01ldGhvZD09PSdibG9ja1VzZXInKXthcmdzPXtoZWFkZXI6WUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLmNvbnRhY3RMaW5rcy5ibG9ja1N1Y2Nlc3NIZC5yZXBs YWNlKHJlZ2V4LG5pY2tuYW1lKSxib2R5OllBSE9PLlNlYXJjaC5BbnN3ZXJzLmxh YmVscy5jb250YWN0TGlua3MuYmxvY2tTdWNjZXNzLnJlcGxhY2UocmVnZXgsbmlj a25hbWUpLGZvb3RlcjpteUJ1dHRvbnMsYWRkQ2xhc3M6J2ljby1ibG9jayd9O25l dHdvcmsuaW5uZXJIVE1MPSc8bGk+PGEgaHJlZj0iJyt1cmwucmVwbGFjZSgvYmxv Y2tVc2VyLywndW5CbG9ja1VzZXInKSsnIj4nK1lBSE9PLlNlYXJjaC5BbnN3ZXJz LmxhYmVscy5jb250YWN0TGlua3MucmVtb3ZlQmxvY2srJzwvYT48L2xpPic7WXVk LmFkZENsYXNzKHByb2ZpbGUsWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmNvbnRh Y3RMaW5rcy5pc0Jsb2NrZWQpO30KYnJlYWs7Y2FzZS0zOmFyZ3M9e2hlYWRlcjpZ QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtzLmNvbnRhY3RM aW1pdEhkLGJvZHk6WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmNvbnRhY3RM aW5rcy5jb250YWN0TGltaXRCZCxmb290ZXI6bXlCdXR0b25zLGFkZENsYXNzOidp Y28teWllbGQnfTticmVhaztjYXNlLTQ6YXJncz17aGVhZGVyOllBSE9PLlNlYXJj aC5BbnN3ZXJzLmxhYmVscy5jb250YWN0TGlua3MuY29udGFjdE5BSGQsYm9keTpZ QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtzLmNvbnRhY3RO QUJkLGZvb3RlcjpteUJ1dHRvbnMsYWRkQ2xhc3M6J2ljby15aWVsZCd9O2JyZWFr O2Nhc2UtNTphcmdzPXtoZWFkZXI6WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxz LmNvbnRhY3RMaW5rcy5jb250YWN0WW91SGQsYm9keTpZQUhPTy5TZWFyY2guQW5z d2Vycy5sYWJlbHMuY29udGFjdExpbmtzLmNvbnRhY3RZb3VCZCxmb290ZXI6bXlC dXR0b25zLGFkZENsYXNzOidpY28teWllbGQnfTticmVhaztjYXNlLTY6YXJncz17 aGVhZGVyOllBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jb250YWN0TGlua3Mu cmVtb3ZlRmFuSGQsYm9keTpZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29u dGFjdExpbmtzLnJlbW92ZUZhbkJkLGZvb3RlcjpteUJ1dHRvbnMsYWRkQ2xhc3M6 J2ljby1ibHVlLWJ1ZGR5J307YnJlYWs7Y2FzZS05OmFyZ3M9e2hlYWRlcjpZQUhP Ty5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtzLmNvbnRhY3RDYW50 SGQsYm9keTpZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtz LmNvbnRhY3RDYW50QmQsZm9vdGVyOm15QnV0dG9ucyxhZGRDbGFzczonaWNvLXlp ZWxkJ307YnJlYWs7Y2FzZS0xMTphcmdzPXtoZWFkZXI6WUFIT08uU2VhcmNoLkFu c3dlcnMubGFiZWxzLmNvbnRhY3RMaW5rcy5ibG9ja0xpbWl0SGQsYm9keTpZQUhP Ty5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtzLmJsb2NrTGltaXRC ZCxmb290ZXI6bXlCdXR0b25zLGFkZENsYXNzOidpY28teWllbGQnfTticmVhaztj YXNlLTE6Y2FzZS0yOmNhc2UtNzpkZWZhdWx0OmFyZ3M9e2hlYWRlcjpZQUhPTy5T ZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtzLmVycm9ySGQsYm9keTpZ QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY29udGFjdExpbmtzLmVycm9yQmQs Zm9vdGVyOm15QnV0dG9ucyxhZGRDbGFzczonaWNvLXlpZWxkJ307YnJlYWs7fQpZ QUhPTy5TZWFyY2guQW5zd2Vycy5zaG93QWxlcnQuZmlyZShhcmdzKTtuZXR3b3Jr UHJvY2Vzc2luZz1mYWxzZTt9fQpmdW5jdGlvbiBjYWxsYmFja0ZhaWwobyl7dmFy IG15QnV0dG9ucz1be3RleHQ6WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmNv bnRhY3RMaW5rcy5va2F5LGhhbmRsZXI6ZnVuY3Rpb24oKXtZQUhPTy5TZWFyY2gu QW5zd2Vycy5jbG9zZUFsZXJ0LmZpcmUoKTt9LGlzRGVmYXVsdDp0cnVlfV07YXJn cz17aGVhZGVyOllBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jb250YWN0TGlu a3MuZXJyb3JIZCxib2R5OllBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5jb250 YWN0TGlua3MuZXJyb3JCZCxmb290ZXI6bXlCdXR0b25zLGFkZENsYXNzOidpY28t eWllbGQnfTtZQUhPTy5TZWFyY2guQW5zd2Vycy5zaG93QWxlcnQuZmlyZShhcmdz KTtuZXR3b3JrUHJvY2Vzc2luZz1mYWxzZTt9CmZ1bmN0aW9uIG5ldHdvcmtMaW5r KGUpe2lmKG5ldHdvcmtQcm9jZXNzaW5nKXtyZXR1cm4gdHJ1ZTt9Cm5ldHdvcmtQ cm9jZXNzaW5nPXRydWU7aWYoc3RhdENhcmQpe3N0YXRDYXJkLmhpZGUoKTt9Cmhv dmVyT3Blbj1mYWxzZTt2YXIgdGFyZ2V0PVl1ZS5nZXRUYXJnZXQoZSk7aWYodGFy Z2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PSdhJyYmIXRhcmdldC5ocmVmLm1h dGNoKC9sb2dpbi55YWhvby5jb20vKSl7WXVlLnByZXZlbnREZWZhdWx0KGUpO3Vy bD10YXJnZXQuaHJlZjtuZXR3b3JrTWV0aG9kPXVybC5tYXRjaCgvbWV0aG9kPShb XiZdKikvKVsxXTtwcm9maWxlSWQ9dXJsLm1hdGNoKC9raWQ9KFteJl0qKS8pWzFd O3ZhciBjYWxsYmFjaz17c3VjY2VzczpjYWxsYmFja1N1Y2Nlc3MsZmFpbHVyZTpj YWxsYmFja0ZhaWx9O1lBSE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoJ0dF VCcsdXJsKyImY3VydGltZT0iKyhuZXcgRGF0ZSgpLmdldFRpbWUoKS50b1N0cmlu ZygpKSxjYWxsYmFjayk7fX0KcmV0dXJue2luaXQ6ZnVuY3Rpb24oKXt2YXIgcHJv ZmlsZU5ldHdvcms9WXVkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25ldHdvcmsn LCd1bCcsJ21lbWJlci1zdW1tYXJ5JylbMF07aWYocHJvZmlsZU5ldHdvcmspe1l1 ZS5vbihwcm9maWxlTmV0d29yaywnY2xpY2snLG5ldHdvcmtMaW5rKTt9CnZhciBk cmF3UHJvZmlsZT1mdW5jdGlvbihlLHRpbWVvdXQpe3RpbWVvdXQ9KHRpbWVvdXQh PT11bmRlZmluZWQpP3RpbWVvdXQ6MjAwO3ZhciBzZWxmPXRoaXM7WXVlLnN0b3BQ cm9wYWdhdGlvbihlKTthY2NJZD1zZWxmLmlkO2FjY0lkPWFjY0lkLnJlcGxhY2Uo L3Byb2ZpbGUtLywnJyk7aWYoIVlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKHNlbGYu cGFyZW50Tm9kZSxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYW5zd2Vyc0NvbXBh Y3QuaGlkZUNsYXNzKSl7Y2xlYXJUaW1lb3V0KGhvdmVyVGltZXIpO30KaG92ZXJU aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoaG92ZXJPcGVuIT09YWNjSWQm JiFZQUhPTy51dGlsLkRvbS5oYXNDbGFzcyhzZWxmLnBhcmVudE5vZGUsWUFIT08u U2VhcmNoLkFuc3dlcnMuY3NzLmFuc3dlcnNDb21wYWN0LmhpZGVDbGFzcykpe3Zh ciBmb290ZXJMaW5rcz1ZdWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjc3MuZm9v dGVyQ2xhc3MsJ3VsJyxzZWxmLnBhcmVudE5vZGUpO2lmKGZvb3RlckxpbmtzLmxl bmd0aCl7c3RhdENhcmQuc2V0Rm9vdGVyKGZvb3RlckxpbmtzWzBdLmNsb25lTm9k ZSh0cnVlKSk7fQplbHNle3N0YXRDYXJkLnNldEZvb3RlcignJm5ic3A7Jyk7fQpk aXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaXYpO3NlbGYuYXBwZW5kQ2hpbGQo ZGl2KTtob3Zlck9wZW49YWNjSWQ7c3RhdENhcmQuY2ZnLnNldFByb3BlcnR5KCdj b250ZXh0Jyxbc2VsZiwndGwnLCd0ciddKTtzdGF0Q2FyZC5jZmcuc2V0UHJvcGVy dHkoJ3gnLChzdGF0Q2FyZC5jZmcuZ2V0UHJvcGVydHkoJ3gnKSkpO3N0YXRDYXJk LnNldEJvZHkoJzxpbWcgc3JjPSJodHRwOi8vbC55aW1nLmNvbS9hL2kvdXMvc2No L2dyMi9ncmVlbmJ1c3lfd2hiZy5naWYiIGFsdD0iJytZQUhPTy5TZWFyY2guQW5z d2Vycy5sYWJlbHMudXNlclByb2ZpbGVDYXJkLmxvYWRpbmcrJyI+Jyk7c3RhdENh cmQucmVuZGVyKCk7c3RhdENhcmQuc2hvdygpO1lBSE9PLlNlYXJjaC5BbnN3ZXJz LnVzZXJQcm9maWxlQ2FyZC5nZXREYXRhKGFjY0lkKTt2YXIgZnQ9WXVkLmdldEVs ZW1lbnRzQnlDbGFzc05hbWUoJ2Z0JywnZGl2Jyxjc3MucHJvZmlsZUNhcmRJZClb MF07WXVlLm9uKGZ0LCdjbGljaycsbmV0d29ya0xpbmspO319LHRpbWVvdXQpO307 dmFyIGtpbGxQcm9maWxlPWZ1bmN0aW9uKGUsdGltZW91dCl7dGltZW91dD0odGlt ZW91dCE9PXVuZGVmaW5lZCk/dGltZW91dDo1MDA7WXVlLnN0b3BQcm9wYWdhdGlv bihlKTtjbGVhclRpbWVvdXQoaG92ZXJUaW1lcik7aG92ZXJUaW1lcj1zZXRUaW1l b3V0KGZ1bmN0aW9uKCl7c3RhdENhcmQuaGlkZSgpO2hvdmVyT3Blbj1mYWxzZTt9 LHRpbWVvdXQpO307dmFyIGNhcmRzPVl1ZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l KGNzcy5wcm9maWxlQ2xhc3MsJ2RpdicpO2lmKGNhcmRzLmxlbmd0aD4wKXtkaXY9 ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ZGl2LmlkPWNzcy5wcm9maWxl Q2FyZElkO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tY29udGVudCcpLmFw cGVuZENoaWxkKGRpdik7c3RhdENhcmQ9bmV3IFlBSE9PLndpZGdldC5PdmVybGF5 KGRpdix7dmlzaWJsZTpmYWxzZSxjb25zdHJhaW50b3ZpZXdwb3J0OmZhbHNlLHpJ bmRleDoxfSk7c3RhdENhcmQucmVuZGVyKCk7Zm9yKHZhciBpPTAsbD1jYXJkcy5s ZW5ndGg7aTxsO2krKyl7dmFyIGFjY0lkPWNhcmRzW2ldLmlkO2FjY0lkPWFjY0lk LnJlcGxhY2UoL3Byb2ZpbGUtLywnJyk7aWYoYWNjSWQ9PT1jc3MubXlTdGF0dXNJ ZHx8YWNjSWQ9PT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MucG9pbnRzQWxlcnQu bXlBbGVydElkfHwhWXVkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N0YXRzJywn ZGwnLGNhcmRzW2ldKS5sZW5ndGgpe2NvbnRpbnVlO30KaWRzLnB1c2goYWNjSWQp O1l1ZS5vbihjYXJkc1tpXSwnbW91c2VvdmVyJyxkcmF3UHJvZmlsZSwyMDApO1l1 ZS5vbihjYXJkc1tpXSwnbW91c2VvdXQnLGtpbGxQcm9maWxlLDUwMCk7WXVlLm9u KGNhcmRzW2ldLCdmb2N1cycsZHJhd1Byb2ZpbGUsMCk7WXVlLm9uKGNhcmRzW2ld LCdibHVyJyxraWxsUHJvZmlsZSwwKTt9fX0sdXBkYXRlQ2FyZDpmdW5jdGlvbihh Y2NJZCl7Y2FjaGVkPXRydWU7dmFyIGl0ZW09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoY3NzLnByb2ZpbGVQcmVmaXgrYWNjSWQpO3ZhciBNZW1iZXJTaW5jZT1pdGVt LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkZCcpWzBdLmZpcnN0Q2hpbGQubm9kZVZh bHVlO3ZhciBlbHM9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZSgnY29udHJpYnV0aW9ucycsJ2RsJyxpdGVtKTt2YXIgU2Vjb25kSXRlbVZhbHVl PWZhbHNlO2lmKFlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKGl0ZW0sJ2tub3dsZWRn ZS1wYXJ0bmVyJykpe1NlY29uZEl0ZW1WYWx1ZT1pdGVtLmdldEVsZW1lbnRzQnlU YWdOYW1lKCdkZCcpWzFdLmlubmVySFRNTDtTZWNvbmRJdGVtTmFtZT1pdGVtLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCdkdCcpWzFdLmlubmVySFRNTDt9ZWxzZXtTZWNv bmRJdGVtVmFsdWU9aXRlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGQnKVsxXS5m aXJzdENoaWxkLm5vZGVWYWx1ZTt9CnZhciBjb250cmlidXRpb25zPScnO2lmKGVs cy5sZW5ndGg+MCl7Y29udHJpYnV0aW9ucz0nPGRsIGNsYXNzPSJjb250cmlidXRp b25zIj4nK2Vsc1swXS5pbm5lckhUTUwrJzwvZGw+Jzt9CnZhciBjYXJkQm9keTtj YXJkQm9keT0nPHVsIGNsYXNzPSJiZXN0Ij4nO2NhcmRCb2R5Kz0nPGxpIGNsYXNz PSJiZXN0Ij4nK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy51c2VyUHJvZmls ZUNhcmQuYmVzdEFuc3dlcisnIDxzcGFuPicrY2FjaGVbJ3Byb2ZpbGVDYXJkcydd W2FjY0lkXS5wZXJjZW50KyclPC9zcGFuPic7aWYoKGNhY2hlWydwcm9maWxlQ2Fy ZHMnXVthY2NJZF0udG90YWxfYW5zX2NudCk9PT0xKXtjYXJkQm9keSs9JzxsaSBj bGFzcz0idG90YWwiPicrWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnVzZXJQ cm9maWxlQ2FyZC5hbnN3ZXJDb3VudFNpbmd1bGFyLnJlcGxhY2UoLyVjb3VudCUv LGNhY2hlWydwcm9maWxlQ2FyZHMnXVthY2NJZF0udG90YWxfYW5zX2NudCk7fQpl bHNle2NhcmRCb2R5Kz0nPGxpIGNsYXNzPSJ0b3RhbCI+JytZQUhPTy5TZWFyY2gu QW5zd2Vycy5sYWJlbHMudXNlclByb2ZpbGVDYXJkLmFuc3dlckNvdW50UGx1cmFs LnJlcGxhY2UoLyVjb3VudCUvLGNhY2hlWydwcm9maWxlQ2FyZHMnXVthY2NJZF0u dG90YWxfYW5zX2NudCk7fQpjYXJkQm9keSs9JzwvdWw+JztjYXJkQm9keSs9Y29u dHJpYnV0aW9ucztjYXJkQm9keSs9JzxkbCBjbGFzcz0ic3RhdHMiPic7aWYoIVlB SE9PLnV0aWwuRG9tLmhhc0NsYXNzKGl0ZW0sJ2tub3dsZWRnZS1wYXJ0bmVyJykp e2NhcmRCb2R5Kz0nPGR0PicrWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnVz ZXJQcm9maWxlQ2FyZC5tZW1iZXJTaW5jZSsnIDwvZHQ+PGRkPicrTWVtYmVyU2lu Y2UrJzwvZGQ+JztjYXJkQm9keSs9JzxkdD4nK1lBSE9PLlNlYXJjaC5BbnN3ZXJz LmxhYmVscy51c2VyUHJvZmlsZUNhcmQudG90YWxQb2ludHMrJyA8L2R0PjxkZD4n K1NlY29uZEl0ZW1WYWx1ZSsnPC9kZD4nO2NhcmRCb2R5Kz0nPGR0IGNsYXNzPSJs YXN0Ij4nK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy51c2VyUHJvZmlsZUNh cmQudGhpc1dlZWsrJyA8L2R0PjxkZCBjbGFzcz0ibGFzdCI+JytjYWNoZVsncHJv ZmlsZUNhcmRzJ11bYWNjSWRdLndlZWtseSsnPC9kZD4nO31lbHNle2lmKFlBSE9P LnV0aWwuRG9tLmhhc0NsYXNzKGl0ZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Rk JylbMV0sJ3dlYnNpdGUnKSl7Y2FyZEJvZHkrPSc8ZHQ+JytZQUhPTy5TZWFyY2gu QW5zd2Vycy5sYWJlbHMudXNlclByb2ZpbGVDYXJkLm1lbWJlclNpbmNlKycgPC9k dD48ZGQ+JytNZW1iZXJTaW5jZSsnPC9kZD4nO2NhcmRCb2R5Kz0nPGR0IGNsYXNz PSJsYXN0IHdlYnNpdGUiPicrU2Vjb25kSXRlbU5hbWUrJzwvZHQ+PGRkIGNsYXNz PSJsYXN0Ij4nK1NlY29uZEl0ZW1WYWx1ZSsnPC9kZD4nO30KZWxzZXtjYXJkQm9k eSs9JzxkdCBjbGFzcz0ibGFzdCI+JytZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMudXNlclByb2ZpbGVDYXJkLm1lbWJlclNpbmNlKycgPC9kdD48ZGQgY2xhc3M9 Imxhc3QiPicrTWVtYmVyU2luY2UrJzwvZGQ+Jzt9fQpjYXJkQm9keSs9JzwvZGw+ JztzdGF0Q2FyZC5zZXRCb2R5KGNhcmRCb2R5KTt9LGdldERhdGE6ZnVuY3Rpb24o YWNjSWQpe2lmKGNhY2hlZCYmdHlwZW9mIGNhY2hlIT09J3VuZGVmaW5lZCcpe1lB SE9PLlNlYXJjaC5BbnN3ZXJzLnVzZXJQcm9maWxlQ2FyZC51cGRhdGVDYXJkKGFj Y0lkKTt9ZWxzZSBpZighZmV0Y2hpbmdEYXRhKXtmZXRjaGluZ0RhdGE9dHJ1ZTt2 YXIgdXJpPSIvY29tbW9uL3V0aWwva3MtcWEteGhyLWhhbmRsZXIucGhwIisiP21l dGhvZD1nZXRLaWREYXRhJmtpZGFycj0iK2lkczt2YXIgY2FsbGJhY2s9e3N1Y2Nl c3M6WUFIT08uU2VhcmNoLkFuc3dlcnMudXNlclByb2ZpbGVDYXJkLmdldFJlc3Bv bnNlLGZhaWx1cmU6WUFIT08uU2VhcmNoLkFuc3dlcnMudXNlclByb2ZpbGVDYXJk LmdldFJlc3BvbnNlLHRpbWVvdXQ6NzAwMCxhcmd1bWVudDpbYWNjSWRdfTt2YXIg dHJhbnNhY3Rpb249WUFIT08udXRpbC5Db25uZWN0LmFzeW5jUmVxdWVzdCgnR0VU Jyx1cmksY2FsbGJhY2ssbnVsbCk7fWVsc2V7c3RhdENhcmQuaGlkZSgpO319LGdl dFJlc3BvbnNlOmZ1bmN0aW9uKHJlc3BvbnNlKXtmZXRjaGluZ0RhdGE9ZmFsc2U7 anNvblRleHQ9cmVzcG9uc2UucmVzcG9uc2VUZXh0O3ZhciBqc29uPWV2YWwoJygn K2pzb25UZXh0KycpJyk7Y2FjaGVbJ3Byb2ZpbGVDYXJkcyddPWpzb247WUFIT08u U2VhcmNoLkFuc3dlcnMudXNlclByb2ZpbGVDYXJkLnVwZGF0ZUNhcmQocmVzcG9u c2UuYXJndW1lbnRbMF0pO319O30oKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5wb2lu dHNBbGVydD1mdW5jdGlvbigpe3ZhciBmYWRlVGltZXI7cmV0dXJue2luaXQ6ZnVu Y3Rpb24oKXt2YXIgbm90aWZ5PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5wb2ludHNBbGVydC5teUFsZXJ0SWQpO2lmKG5v dGlmeSl7dmFyIG15Q2FyZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChZQUhPTy5T ZWFyY2guQW5zd2Vycy5jc3MudXNlclByb2ZpbGVDYXJkLm15U3RhdHVzSWQpO2lm KG15Q2FyZCl7dmFyIHBvcz1ZQUhPTy51dGlsLkRvbS5nZXRYWShteUNhcmQpO1lB SE9PLnV0aWwuRG9tLnNldFhZKG5vdGlmeSxwb3MsdHJ1ZSk7WUFIT08udXRpbC5E b20uc2V0U3R5bGUoWUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZSgnYmQnLCdkaXYnLG5vdGlmeSlbMF0sJ2hlaWdodCcsWUFIT08udXRpbC5Eb20u Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYmQnLCdkaXYnLG15Q2FyZClbMF0ub2Zm c2V0SGVpZ2h0KzQrJ3B4Jyk7dmFyIG5vdGlmeWZ0PVlBSE9PLnV0aWwuRG9tLmdl dEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Z0JywnZGl2Jyxub3RpZnkpWzBdO25vdGlm eWZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm90aWZ5ZnQpO3ZhciBhbmltPW5l dyBZQUhPTy51dGlsLkFuaW0obm90aWZ5LHtvcGFjaXR5Ont0bzowfX0sMS41LFlB SE9PLnV0aWwuRWFzaW5nLmVhc2VJbik7ZmFkZVRpbWVyPXNldFRpbWVvdXQoZnVu Y3Rpb24oKXthbmltLmFuaW1hdGUoKTt9LDcwMDApO2FuaW0ub25Db21wbGV0ZS5z dWJzY3JpYmUoZnVuY3Rpb24oZSl7WUFIT08udXRpbC5Eb20uc2V0WChub3RpZnks Jy05OTk5Jyk7fSk7fX19fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuY29tbWVu dFBhbmU9ZnVuY3Rpb24oKXt2YXIgZ0Nzcz1ZQUhPTy5TZWFyY2guQW5zd2Vycy5j c3MsY3NzPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5jb21tZW50UGFuZSxZdWQ9 WUFIT08udXRpbC5Eb20sWXVlPVlBSE9PLnV0aWwuRXZlbnQ7cmV0dXJue2luaXQ6 ZnVuY3Rpb24oKXt2YXIgY29tbWVudHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo Y3NzLmNvbW1lbnRQYW5lSWQpO3ZhciBjb21tZW50QnV0dG9uPWRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKGNzcy5jb21tZW50QnV0dG9uSWQpO2lmKGNvbW1lbnRzJiZj b21tZW50QnV0dG9uKXtZdWUub24oY29tbWVudEJ1dHRvbiwnY2xpY2snLGZ1bmN0 aW9uKGUpe1l1ZS5wcmV2ZW50RGVmYXVsdChlKTtpZihZdWQuaGFzQ2xhc3MoY29t bWVudHMsY3NzLnNob3dDbGFzcykpe1l1ZC5yZW1vdmVDbGFzcyhjb21tZW50cyxj c3Muc2hvd0NsYXNzKTtZdWQucmVtb3ZlQ2xhc3MoY29tbWVudEJ1dHRvbixjc3Mu b3BlbkJ1dHRvbkNsYXNzKTt9ZWxzZXtZdWQuYWRkQ2xhc3MoY29tbWVudHMsY3Nz LnNob3dDbGFzcyk7WXVkLmFkZENsYXNzKGNvbW1lbnRCdXR0b24sY3NzLm9wZW5C dXR0b25DbGFzcyk7fX0pO3ZhciBmb3JtPWNvbW1lbnRzLmdldEVsZW1lbnRzQnlU YWdOYW1lKCdmb3JtJylbMF07WXVlLm9uKGZvcm0sJ3N1Ym1pdCcsZnVuY3Rpb24o ZSl7WXVlLnByZXZlbnREZWZhdWx0KGUpO3ZhciBlcnJvcnM9ZmFsc2U7dmFyIGNv bW1lbnRzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNzcy5jb21tZW50UGFuZUlk KTtpZihjb21tZW50cy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKS5s ZW5ndGg+MCYmY29tbWVudHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RleHRhcmVh JylbMF0udmFsdWU9PT0nJyl7ZXJyb3JzPXRydWU7WXVkLmFkZENsYXNzKGNvbW1l bnRzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdLGNzcy5lcnJv ckNsYXNzKTt9CmlmKCFlcnJvcnMpe3RoaXMuc3VibWl0KCk7fX0pO1lBSE9PLlNl YXJjaC5BbnN3ZXJzLmxpbWl0Q2hhcmFjdGVycyhjb21tZW50cy5nZXRFbGVtZW50 c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXSwzMDAsZmFsc2UsWUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLmxpbWl0Q2hhcmFjdGVycy5zdGF0dXNDb3VudCwiYmxv Y2siLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hc2tGbG93LmNvdW50Q2xhc3Mp O319fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuYW5zd2Vyc1NvcnQ9ZnVuY3Rp b24oKXt2YXIgZ0Nzcz1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MsY3NzPVlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5hbnN3ZXJzU29ydCxZdWQ9WUFIT08udXRpbC5E b20sWXVlPVlBSE9PLnV0aWwuRXZlbnQ7cmV0dXJue2luaXQ6ZnVuY3Rpb24oKXt2 YXIgZm9ybT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjc3MuZm9ybUlkKTtpZihm b3JtKXt2YXIgc2VsZWN0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNzcy5zZWxl Y3RJZCk7aWYoc2VsZWN0KXtZdWUub24oc2VsZWN0LCdjaGFuZ2UnLGZ1bmN0aW9u KGUpe3ZhciB1cmw9Zm9ybS5hY3Rpb24rJz9xaWQ9Jytmb3JtLnFpZC52YWx1ZSsn JnNob3c9JytzZWxlY3QudmFsdWUrJyMnK2Nzcy5oYXNoVG87aWYodHlwZW9mIHlh bkFuc3dlclNvcnRVbHQhPT0ndW5kZWZpbmVkJyl7dXJsPXlhbkFuc3dlclNvcnRV bHRbJ29wdGlvbicrc2VsZWN0LnZhbHVlXS5yZXBsYWNlKC8mYW1wOy9nLCcmJykr JyMnK2Nzcy5oYXNoVG87fQp3aW5kb3cubG9jYXRpb249dXJsO30pO319fX07fSgp O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxpbWl0Q2hhcmFjdGVycz1mdW5jdGlvbihl bCxsaW1pdCxiZWZvcmUsbGltaXRUZXh0LGRpc3BsYXksYWRkQ2xhc3MscmVtb3Zl RGVmYXVsdCl7dmFyIHRleHRhcmVhLGNvdW50ZXI7bGltaXQ9bGltaXR8fDExMDtk aXNwbGF5PWRpc3BsYXl8fCJibG9jayI7YmVmb3JlPWJlZm9yZXx8ZmFsc2U7cmVt b3ZlRGVmYXVsdD0odHlwZW9mIHJlbW92ZURlZmF1bHQ9PSd1bmRlZmluZWQnP3Ry dWU6cmVtb3ZlRGVmYXVsdCk7bGltaXRUZXh0PWxpbWl0VGV4dHx8WUFIT08uU2Vh cmNoLkFuc3dlcnMubGFiZWxzLmxpbWl0Q2hhcmFjdGVycy5zdGF0dXNDb3VudDt2 YXIgY3JlYXRlQ291bnRlcj1mdW5jdGlvbigpe2lmKHJlbW92ZURlZmF1bHQpCntp ZihlbC52YWx1ZT09PXJlbW92ZURlZmF1bHQpe2VsLnZhbHVlPScnO2VsLmRlZmF1 bHRWYWx1ZT0nJzt9fQppZighY291bnRlcil7aWYoZGlzcGxheT09PSdpbmxpbmUn KXt2YXIgcmV0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt9ZWxzZXt2 YXIgcmV0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO30KcmV0LmlubmVy SFRNTD1saW1pdFRleHQucmVwbGFjZSgvJWNvdW50JS8sJzxzcGFuPicrbGltaXQr Jzwvc3Bhbj4nKTtpZihhZGRDbGFzcyl7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3Mo cmV0LGFkZENsYXNzKTt9CmlmKGRpc3BsYXkhPT0nbm9uZScmJmJlZm9yZSl7WUFI T08udXRpbC5Eb20uaW5zZXJ0QmVmb3JlKHJldCxlbCk7fWVsc2UgaWYoZGlzcGxh eSE9PSdub25lJyl7WUFIT08udXRpbC5Eb20uaW5zZXJ0QWZ0ZXIocmV0LGVsKTt9 CmNvdW50ZXI9cmV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzcGFuJylbMF07Y2hl Y2tMZW5ndGgoKTt9fTt2YXIgY2hlY2tMZW5ndGg9ZnVuY3Rpb24oZSl7aWYoIWNv dW50ZXIpe2NyZWF0ZUNvdW50ZXIoKTt9CmlmKHBhcnNlSW50KGxpbWl0LDEwKS1l bC52YWx1ZS5sZW5ndGg8MCl7WUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVs dChlKTtlbC52YWx1ZT1lbC52YWx1ZS5zdWJzdHJpbmcoMCxsaW1pdCk7fQpjb3Vu dGVyLmlubmVySFRNTD0ocGFyc2VJbnQobGltaXQsMTApLWVsLnZhbHVlLmxlbmd0 aCk7fTtpZihlbCl7aWYodHlwZW9mIGJlZm9yZT09PSd1bmRlZmluZWQnKXtiZWZv cmU9dHJ1ZTt9CmVsLm1heExlbmd0aD1saW1pdDtZQUhPTy51dGlsLkV2ZW50Lm9u KGVsLCdrZXl1cCcsY2hlY2tMZW5ndGgpO1lBSE9PLnV0aWwuRXZlbnQub24oZWws J2ZvY3VzJyxjcmVhdGVDb3VudGVyKTtpZihlbC52YWx1ZSE9PWVsLmRlZmF1bHRW YWx1ZSl7Y3JlYXRlQ291bnRlcigpO319fTtZQUhPTy5TZWFyY2guQW5zd2Vycy5h c2tNaW5pPWZ1bmN0aW9uKCl7dmFyIFl1ZD1ZQUhPTy51dGlsLkRvbSxZdWU9WUFI T08udXRpbC5FdmVudDtyZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBlbD1kb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWFza21pbmktcScpO2lmKGVsKXtpZihl bC52YWx1ZT09PVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5hc2tNaW5pLm5v VGV4dHx8ZWwudmFsdWU9PT0nJyl7WXVkLmFkZENsYXNzKGVsLCdkZWZhdWx0Jyk7 ZWwuZGVmYXVsdFZhbHVlPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5hc2tN aW5pLm5vVGV4dDtlbC52YWx1ZT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMu YXNrTWluaS5ub1RleHQ7fQpZdWUub24oZWwsJ2ZvY3VzJyxmdW5jdGlvbihlKXtp Zih0aGlzLnZhbHVlPT09WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmFza01p bmkubm9UZXh0fHx0aGlzLnZhbHVlPT09Jycpe1l1ZC5yZW1vdmVDbGFzcyh0aGlz LCdkZWZhdWx0Jyk7dGhpcy52YWx1ZT0nJzt9fSk7WXVlLm9uKGVsLCdibHVyJyxm dW5jdGlvbihlKXtpZih0aGlzLnZhbHVlPT09Jycpe1l1ZC5hZGRDbGFzcyh0aGlz LCdkZWZhdWx0Jyk7dGhpcy52YWx1ZT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMuYXNrTWluaS5ub1RleHQ7fX0pO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxpbWl0 Q2hhcmFjdGVycyhlbCwxMTAsZmFsc2UsWUFIT08uU2VhcmNoLkFuc3dlcnMubGFi ZWxzLmxpbWl0Q2hhcmFjdGVycy5zdGF0dXNDb3VudCwiYmxvY2siLFlBSE9PLlNl YXJjaC5BbnN3ZXJzLmNzcy5hc2tNaW5pLmNvdW50Q2xhc3MsWUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLmFza01pbmkubm9UZXh0KTtZQUhPTy51dGlsLkV2ZW50 Lm9uKGVsLmZvcm0sJ3N1Ym1pdCcsZnVuY3Rpb24oZSl7aWYoZWwudmFsdWU9PT1Z QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuYXNrTWluaS5ub1RleHQpe2VsLnZh bHVlPScnO319KTt9fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmFjdGlvbkJh cj1mdW5jdGlvbigpe3ZhciBob3ZlclRpbWVyLG1lbnVzPVtdO2Z1bmN0aW9uIGNy ZWF0ZURyb3BEb3duKGVsKXtpZihlbCl7dmFyIGNvbnRlbnRzPWVsLmdldEVsZW1l bnRzQnlUYWdOYW1lKCd1bCcpWzBdO3ZhciBlZGl0TGluaz1lbC5nZXRFbGVtZW50 c0J5VGFnTmFtZSgnYScpWzBdLmNsb25lTm9kZSh0cnVlKTt2YXIgbGk9ZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnbGknKTt2YXIgc3RyPVlBSE9PLlNlYXJjaC5BbnN3 ZXJzLmxhYmVscy5hY3Rpb25CYXIuZmlyc3RMaW5rc1tlbC5pZF07aWYoZWRpdExp bmsuZ2V0QXR0cmlidXRlKCd0aXRsZScpKXtzdHI9ZWRpdExpbmsuZ2V0QXR0cmli dXRlKCd0aXRsZScpO2VsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJylbMF0uc2V0 QXR0cmlidXRlKCd0aXRsZScsJycpO30KZWRpdExpbmsuaW5uZXJIVE1MPXN0cjtZ QUhPTy51dGlsLkRvbS5hZGRDbGFzcyhsaSxZQUhPTy5TZWFyY2guQW5zd2Vycy5j c3MuYWN0aW9uQmFyLmZpcnN0SXRlbSk7bGkuYXBwZW5kQ2hpbGQoZWRpdExpbmsp O2NvbnRlbnRzLmluc2VydEJlZm9yZShsaSxjb250ZW50cy5maXJzdENoaWxkKTtt ZW51c1tlbC5pZF09bmV3IFlBSE9PLndpZGdldC5PdmVybGF5KGVsLmlkK1lBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5hY3Rpb25CYXIubWVudVBvc3RmaXgse3Zpc2li bGU6ZmFsc2UsY29uc3RyYWludG92aWV3cG9ydDpmYWxzZSx6SW5kZXg6Mn0pO21l bnVzW2VsLmlkXS5zZXRCb2R5KGNvbnRlbnRzKTttZW51c1tlbC5pZF0ucmVuZGVy KGVsKTtZQUhPTy51dGlsLkV2ZW50Lm9uKGVsLmdldEVsZW1lbnRzQnlUYWdOYW1l KCdhJylbMF0sJ2NsaWNrJyxmdW5jdGlvbihlKXtZQUhPTy51dGlsLkV2ZW50LnBy ZXZlbnREZWZhdWx0KGUpO30pO1lBSE9PLnV0aWwuRXZlbnQub24oZWwsJ21vdXNl b3ZlcicsZnVuY3Rpb24oZSl7bWVudXNbdGhpcy5pZF0uY2ZnLnNldFByb3BlcnR5 KCdjb250ZXh0JyxbdGhpcywndGwnLCdibCddKTttZW51c1t0aGlzLmlkXS5zaG93 KCk7Y2xlYXJUaW1lb3V0KGhvdmVyVGltZXIpO30pO1lBSE9PLnV0aWwuRXZlbnQu b24oZWwsJ21vdXNlb3V0JyxmdW5jdGlvbihlKXt2YXIgc2VsZj10aGlzO2hvdmVy VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe21lbnVzW3NlbGYuaWRdLmhpZGUo KTt9LDUwMCk7fSk7WUFIT08udXRpbC5FdmVudC5vbihlbC5nZXRFbGVtZW50c0J5 VGFnTmFtZSgnYScpLCdmb2N1cycsZnVuY3Rpb24oZSl7dmFyIHNlbGY9WUFIT08u dXRpbC5Eb20uZ2V0QW5jZXN0b3JCeUNsYXNzTmFtZSh0aGlzLCdtZW51Jyk7bWVu dXNbc2VsZi5pZF0uY2ZnLnNldFByb3BlcnR5KCdjb250ZXh0Jyxbc2VsZiwndGwn LCdibCddKTttZW51c1tzZWxmLmlkXS5zaG93KCk7Y2xlYXJUaW1lb3V0KGhvdmVy VGltZXIpO30pO1lBSE9PLnV0aWwuRXZlbnQub24oZWwuZ2V0RWxlbWVudHNCeVRh Z05hbWUoJ2EnKSwnYmx1cicsZnVuY3Rpb24oZSl7dmFyIHNlbGY9WUFIT08udXRp bC5Eb20uZ2V0QW5jZXN0b3JCeUNsYXNzTmFtZSh0aGlzLCdtZW51Jyk7aG92ZXJU aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bWVudXNbc2VsZi5pZF0uaGlkZSgp O30sNTAwKTt9KTt9fQpyZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBiYXI9ZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmFj dGlvbkJhci5hY3Rpb25CYXJJZCk7dmFyIGRyb3BzPVlBSE9PLlNlYXJjaC5BbnN3 ZXJzLmNzcy5hY3Rpb25CYXIuZHJvcERvd25JZHM7aWYoYmFyKXtmb3IodmFyIGk9 MCxsPWRyb3BzLmxlbmd0aDtpPGw7aSsrKXt2YXIgZHJvcD1kb2N1bWVudC5nZXRF bGVtZW50QnlJZChkcm9wc1tpXSk7aWYoZHJvcCl7WUFIT08udXRpbC5Eb20uYWRk Q2xhc3MoZHJvcCxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYWN0aW9uQmFyLmRy b3BEb3duQ2xhc3MpO2NyZWF0ZURyb3BEb3duKGRyb3ApO319CllBSE9PLnV0aWwu RXZlbnQub24oYmFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpLCdtb3VzZWVu dGVyJyxmdW5jdGlvbihlKXtpZighWUFIT08udXRpbC5Eb20uaGFzQ2xhc3ModGhp cywnZGlzYWJsZWQnKSYmdGhpcy5wYXJlbnROb2RlLmlkPT09J3lhbi1xdWVzdGlv bi10b29scycpe1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHRoaXMsJ2hvdmVyJyk7 fX0pO1lBSE9PLnV0aWwuRXZlbnQub24oYmFyLmdldEVsZW1lbnRzQnlUYWdOYW1l KCdsaScpLCdtb3VzZWxlYXZlJyxmdW5jdGlvbihlKXtpZih0aGlzLnBhcmVudE5v ZGUuaWQ9PT0neWFuLXF1ZXN0aW9uLXRvb2xzJyl7WUFIT08udXRpbC5Eb20ucmVt b3ZlQ2xhc3ModGhpcywnaG92ZXInKTt9fSk7fX19O30oKTtZQUhPTy5TZWFyY2gu QW5zd2Vycy5zdGFyUXVlc3Rpb249ZnVuY3Rpb24oKXt2YXIgTUVTU0FHRV9GQUlM PTA7dmFyIE1FU1NBR0VfU1VDQ0VTUz0xO2Z1bmN0aW9uIGluaXRTdGFyKGVsKXt2 YXIgcWlkPWVsLmhyZWYubWF0Y2goL3FpZD0oW14mXSopLylbMV07ZnVuY3Rpb24g aGFuZGxlU3Rhcih0eXBlLGFyZ3Mpe2lmKGFyZ3NbMF09PT1xaWQpe3ZhciBzdGFy Q291bnQ9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShZQUhP Ty5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9uLnN0YXJDb3VudENsYXNz LCdzcGFuJyxlbClbMF07aWYoWUFIT08udXRpbC5Eb20uaGFzQ2xhc3MoZWwsWUFI T08uU2VhcmNoLkFuc3dlcnMuY3NzLnN0YXJRdWVzdGlvbi5zdGFycmVkQ2xhc3Mp KXtZQUhPTy51dGlsLkRvbS5yZW1vdmVDbGFzcyhlbCxZQUhPTy5TZWFyY2guQW5z d2Vycy5jc3Muc3RhclF1ZXN0aW9uLnN0YXJyZWRDbGFzcyk7aWYoc3RhckNvdW50 JiZwYXJzZUludChzdGFyQ291bnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUsMTApPjAp e3N0YXJDb3VudC5maXJzdENoaWxkLm5vZGVWYWx1ZT0ocGFyc2VJbnQoc3RhckNv dW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlLDEwKS0xKTtpZihwYXJzZUludChzdGFy Q291bnQuZmlyc3RDaGlsZC5ub2RlVmFsdWUsMTApPT09MCl7WUFIT08udXRpbC5E b20ucmVtb3ZlQ2xhc3Moc3RhckNvdW50LFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNz cy5zdGFyUXVlc3Rpb24uaGFzU3RhcnNDbGFzcyk7fX19CmVsc2V7WUFIT08udXRp bC5Eb20uYWRkQ2xhc3MoZWwsWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnN0YXJR dWVzdGlvbi5zdGFycmVkQ2xhc3MpO1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHN0 YXJDb3VudCxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9uLmhh c1N0YXJzQ2xhc3MpO2lmKHN0YXJDb3VudCl7c3RhckNvdW50LmZpcnN0Q2hpbGQu bm9kZVZhbHVlPShwYXJzZUludChzdGFyQ291bnQuZmlyc3RDaGlsZC5ub2RlVmFs dWUsMTApKzEpO319fX0KWUFIT08uU2VhcmNoLkFuc3dlcnMuc3RhckV2ZW50LnN1 YnNjcmliZShoYW5kbGVTdGFyKTtZQUhPTy51dGlsLkV2ZW50Lm9uKGVsLCdjbGlj aycsdG9nZ2xlU3Rhcik7fQpmdW5jdGlvbiB0b2dnbGVTdGFyKGUpe3ZhciB0YXJn ZXQ9dGhpcztmdW5jdGlvbiBjYWxsYmFja1N1Y2Nlc3Mobyl7dmFyIHJlc3BvbnNl PWV2YWwoJygnK28ucmVzcG9uc2VUZXh0KycpJyk7WUFIT08udXRpbC5Eb20ucmVt b3ZlQ2xhc3ModGFyZ2V0LFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5zdGFyUXVl c3Rpb24uYWRkU3RhckNsYXNzKTtZQUhPTy51dGlsLkRvbS5yZW1vdmVDbGFzcyh0 YXJnZXQsWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnN0YXJRdWVzdGlvbi5yZW1v dmVTdGFyQ2xhc3MpO2lmKHJlc3BvbnNlLmVycm9yPT09J292ZXJsaW1pdCcpe2Rp c3BsYXlNZXNzYWdlKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5zdGFyUXVl c3Rpb24ub3ZlckxpbWl0LnJlcGxhY2UoLyVlbXBoYXNpc19vcGVuJS8sJzxlbSBj bGFzcz0iZmFpbHVyZSI+JykucmVwbGFjZSgvJWVtcGhhc2lzX2Nsb3NlJS8sJzwv ZW0+JyksTUVTU0FHRV9GQUlMKTt9CmVsc2V7aWYocmVzcG9uc2Uuc3Rhcl9zdWNj ZXNzX3RleHQhPT0ndW5kZWZpbmVkJyl7aWYoWUFIT08udXRpbC5Eb20uaGFzQ2xh c3ModGFyZ2V0LFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5zdGFyUXVlc3Rpb24u c3RhcnJlZENsYXNzKSl7dmFyIG1zZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChZ QUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9uLnN0YXR1c1ByZWZp eCtxaWQpO2lmKG1zZyl7bXNnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobXNnKTt9 fQplbHNle2Rpc3BsYXlNZXNzYWdlKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVs cy5zdGFyUXVlc3Rpb24uYWRkU3VjY2Vzcy5yZXBsYWNlKC8lZW1waGFzaXNfb3Bl biUvLCc8ZW0gY2xhc3M9InN1Y2Nlc3MiPicpLnJlcGxhY2UoLyVlbXBoYXNpc19j bG9zZSUvLCc8L2VtPicpLnJlcGxhY2UoLyVsaW5rX29wZW4lLywnPGEgaHJlZj0i L215L3FhL2luZGV4P2xpbms9c3RhcnJlZCI+JykucmVwbGFjZSgvJWxpbmtfY2xv c2UlLywnPC9hPicpLE1FU1NBR0VfU1VDQ0VTUyk7fQpZQUhPTy5TZWFyY2guQW5z d2Vycy5zdGFyRXZlbnQuZmlyZShxaWQsc3RhclN0YXRlLHByaW1hcnlRdWVzdGlv bik7fQplbHNle2Rpc3BsYXlNZXNzYWdlKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxh YmVscy5zdGFyUXVlc3Rpb24uY29ubmVjdGlvbkVycm9yLnJlcGxhY2UoLyVlbXBo YXNpc19vcGVuJS8sJzxlbSBjbGFzcz0iZmFpbHVyZSI+JykucmVwbGFjZSgvJWVt cGhhc2lzX2Nsb3NlJS8sJzwvZW0+JyksTUVTU0FHRV9GQUlMKTt9fX0KZnVuY3Rp b24gY2FsbGJhY2tGYWlsKG8pe1lBSE9PLnV0aWwuRG9tLnJlbW92ZUNsYXNzKHRh cmdldCxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9uLmFkZFN0 YXJDbGFzcyk7WUFIT08udXRpbC5Eb20ucmVtb3ZlQ2xhc3ModGFyZ2V0LFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5zdGFyUXVlc3Rpb24ucmVtb3ZlU3RhckNsYXNz KTtkaXNwbGF5TWVzc2FnZShZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc3Rh clF1ZXN0aW9uLmNvbm5lY3Rpb25FcnJvci5yZXBsYWNlKC8lZW1waGFzaXNfb3Bl biUvLCc8ZW0gY2xhc3M9ImZhaWx1cmUiPicpLnJlcGxhY2UoLyVlbXBoYXNpc19j bG9zZSUvLCc8L2VtPicpLE1FU1NBR0VfRkFJTCk7fQpmdW5jdGlvbiBkaXNwbGF5 TWVzc2FnZShtZXNzYWdlLHR5cGUpe2lmKFlBSE9PLnV0aWwuRG9tLmhhc0NsYXNz KHRhcmdldCxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9uLnNo b3dTdGF0dXNDbGFzcykpe3ZhciBtc2c9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo WUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnN0YXJRdWVzdGlvbi5zdGF0dXNQcmVm aXgrcWlkKTtpZighbXNnKXttc2c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcp O21zZy5pZD1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9uLnN0 YXR1c1ByZWZpeCtxaWQ7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3MobXNnLFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5zdGFyUXVlc3Rpb24uc3RhclN0YXR1c0NsYXNz KTt9CmlmKHR5cGU9PT1NRVNTQUdFX1NVQ0NFU1Mpe1lBSE9PLnV0aWwuRG9tLmFk ZENsYXNzKG1zZyxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3RhclF1ZXN0aW9u LnN1Y2Nlc3NDbGFzcyk7fQplbHNlIGlmKHR5cGU9PT1NRVNTQUdFX0ZBSUwpe1lB SE9PLnV0aWwuRG9tLmFkZENsYXNzKG1zZyxZQUhPTy5TZWFyY2guQW5zd2Vycy5j c3Muc3RhclF1ZXN0aW9uLmZhaWx1cmVDbGFzcyk7fQptc2cuaW5uZXJIVE1MPW1l c3NhZ2U7WUFIT08uU2VhcmNoLkFuc3dlcnMuaW50ZXJlc3RpbmdMaXN0LmRpc3Bs YXlNZXNzYWdlKG1zZyk7fX0KWUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVs dChlKTt2YXIgdXJsPXRoaXMuaHJlZi5yZXBsYWNlKC9kb25lPVteJl0qLywnJyk7 dmFyIHFpZD11cmwubWF0Y2goL3FpZD0oW14mXSopLylbMV07dmFyIHN0YXJTdGF0 ZTt2YXIgcHJpbWFyeVF1ZXN0aW9uPWZhbHNlO2lmKFlBSE9PLnV0aWwuRG9tLmlz QW5jZXN0b3IoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1xdWVzdGlvbi10 b29scycpLHRoaXMpKXtwcmltYXJ5UXVlc3Rpb249dHJ1ZTt9CmlmKFlBSE9PLnV0 aWwuRG9tLmhhc0NsYXNzKHRoaXMsWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnN0 YXJRdWVzdGlvbi5zdGFycmVkQ2xhc3MpKXtZQUhPTy51dGlsLkRvbS5hZGRDbGFz cyh0aGlzLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5zdGFyUXVlc3Rpb24ucmVt b3ZlU3RhckNsYXNzKTt1cmw9dXJsLnJlcGxhY2UoL21ldGhvZD1bXiZdKi8sJ21l dGhvZD11blN0YXJJdGVtJyk7c3RhclN0YXRlPWZhbHNlO30KZWxzZXtZQUhPTy51 dGlsLkRvbS5hZGRDbGFzcyh0aGlzLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5z dGFyUXVlc3Rpb24uYWRkU3RhckNsYXNzKTt1cmw9dXJsLnJlcGxhY2UoL21ldGhv ZD1bXiZdKi8sJ21ldGhvZD1zdGFySXRlbScpO3N0YXJTdGF0ZT10cnVlO30KdmFy IGNhbGxiYWNrPXtzdWNjZXNzOmNhbGxiYWNrU3VjY2VzcyxmYWlsdXJlOmNhbGxi YWNrRmFpbH07WUFIT08udXRpbC5Db25uZWN0LmFzeW5jUmVxdWVzdCgnR0VUJyx1 cmwsY2FsbGJhY2spO30KcmV0dXJue2luaXQ6ZnVuY3Rpb24odHlwZSxhcmdzKXt2 YXIgbWV0aG9kPWZ1bmN0aW9uKGVsKXt2YXIgcmU9bmV3IFJlZ0V4cCgnKHN0YXJJ dGVtfHVuU3Rhckl0ZW0pJyk7cmV0dXJuKHJlLnRlc3QoZWwuaHJlZikmJiFlbC5o cmVmLm1hdGNoKCdsb2dpbicpKTt9O3ZhciB0YXJnZXRzPVlBSE9PLnV0aWwuRG9t LmdldEVsZW1lbnRzQnkobWV0aG9kLCdhJyk7aWYodGFyZ2V0cy5sZW5ndGg+MCl7 WUFIT08udXRpbC5Eb20uYmF0Y2godGFyZ2V0cyxpbml0U3Rhcik7fX0saW5pdFN0 YXI6ZnVuY3Rpb24oZWwpe2luaXRTdGFyKGVsKTt9fTt9KCk7WUFIT08uU2VhcmNo LkFuc3dlcnMuYWxlcnRQYW5lPWZ1bmN0aW9uKCl7dmFyIGRpdj1mYWxzZSxwYW5l bCxjbGFzc1RvUmVtb3ZlPWZhbHNlO2Z1bmN0aW9uIHNob3dBbGVydChlLGFyZ3Mp e2lmKCFkaXYpe2Rpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtkaXYu aWQ9WUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmFsZXJ0UGFuZS5hbGVydElkO2Rv Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtwYW5lbD1uZXcgWUFIT08ud2lk Z2V0LkRpYWxvZyhkaXYse21vZGFsOnRydWUsdmlzaWJsZTpmYWxzZSxmaXhlZGNl bnRlcjp0cnVlLGNvbnN0cmFpbnRvdmlld3BvcnQ6dHJ1ZSxkcmFnZ2FibGU6ZmFs c2UsY2xvc2U6dHJ1ZSx1bmRlcmxheTonbm9uZSd9KTt9CmlmKGNsYXNzVG9SZW1v dmUpe1lBSE9PLnV0aWwuRG9tLnJlbW92ZUNsYXNzKGRpdixjbGFzc1RvUmVtb3Zl KTtjbGFzc1RvUmVtb3ZlPWZhbHNlO30KaWYoYXJnc1swXS5hZGRDbGFzcyl7WUFI T08udXRpbC5Eb20uYWRkQ2xhc3MoZGl2LGFyZ3NbMF0uYWRkQ2xhc3MpO2NsYXNz VG9SZW1vdmU9YXJnc1swXS5hZGRDbGFzczt9CnBhbmVsLnNldEhlYWRlcignPGRp dj4nK2FyZ3NbMF0uaGVhZGVyKyc8L2Rpdj4nKTtwYW5lbC5zZXRCb2R5KGFyZ3Nb MF1bJ2JvZHknXSk7cGFuZWwuY2ZnLnF1ZXVlUHJvcGVydHkoJ2J1dHRvbnMnLGFy Z3NbMF0uZm9vdGVyKTtwYW5lbC5jZmcucXVldWVQcm9wZXJ0eSgnd2lkdGgnLGFy Z3NbMF0ud2lkdGh8fCczNzNweCcpO3BhbmVsLnJlbmRlcigpO3BhbmVsLnNob3co KTt9CmZ1bmN0aW9uIGhpZGVBbGVydCgpe3BhbmVsLmhpZGUoKTt9CnJldHVybntp bml0OmZ1bmN0aW9uKCl7WUFIT08uU2VhcmNoLkFuc3dlcnMuc2hvd0FsZXJ0LnN1 YnNjcmliZShzaG93QWxlcnQpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmNsb3NlQWxl cnQuc3Vic2NyaWJlKGhpZGVBbGVydCk7fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3 ZXJzLnNlb1RodW1icz1mdW5jdGlvbigpe3ZhciBjbGlja2VkLHJhdGVyPW51bGws c3VibWl0dGVkPWZhbHNlO2Z1bmN0aW9uIGhhbmRsZUNsaWNrKGUpe3ZhciB0YXJn ZXQ9WUFIT08udXRpbC5FdmVudC5nZXRUYXJnZXQoZSk7WUFIT08udXRpbC5FdmVu dC5wcmV2ZW50RGVmYXVsdChlKTtpZighc3VibWl0dGVkKXtzdWJtaXR0ZWQ9dHJ1 ZTtpZighWUFIT08udXRpbC5Eb20uaGFzQ2xhc3ModGFyZ2V0LFlBSE9PLlNlYXJj aC5BbnN3ZXJzLmNzcy5zZW9UaHVtYnMub25DbGFzcykpe1lBSE9PLnV0aWwuRG9t LmFkZENsYXNzKHRhcmdldCxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc2VvVGh1 bWJzLm9uQ2xhc3MpO30KY2xpY2tlZD10YXJnZXQuaWQ7dmFyIHVybD10YXJnZXQu aHJlZi5yZXBsYWNlKC9kb25lPVteJl0qJi8sJycpO3ZhciBjYWxsYmFjaz17c3Vj Y2VzczpjYWxsYmFja1N1Y2Nlc3MsZmFpbHVyZTpjYWxsYmFja0ZhaWx9O1lBSE9P LnV0aWwuQ29ubmVjdC5hc3luY1JlcXVlc3QoJ0dFVCcsdXJsLGNhbGxiYWNrKTt9 fQpmdW5jdGlvbiBjYWxsYmFja1N1Y2Nlc3Mobyl7dmFyIHJlc3BvbnNlPWV2YWwo JygnK28ucmVzcG9uc2VUZXh0KycpJyk7aWYoY2xpY2tlZD09PVlBSE9PLlNlYXJj aC5BbnN3ZXJzLmNzcy5zZW9UaHVtYnMudXBJZCkKe3ZhciBoZD1yYXRlci5nZXRF bGVtZW50c0J5VGFnTmFtZSgnaDQnKVswXTt2YXIgY29udGFpbmVycz1ZQUhPTy51 dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFlBSE9PLlNlYXJjaC5BbnN3 ZXJzLmNzcy5zZW9UaHVtYnMuY29udGFpbmVyQ2xhc3MsJ2RpdicscmF0ZXIpO2lm KGhkJiZjb250YWluZXJzLmxlbmd0aD4wKXt2YXIgY29udGFpbmVyPWNvbnRhaW5l cnNbMF07aWYoWUFIT08udXRpbC5Eb20uaGFzQ2xhc3MocmF0ZXIsWUFIT08uU2Vh cmNoLkFuc3dlcnMuY3NzLnNlb1RodW1icy5sb2dnZWRJbkNsYXNzKSl7dmFyIHN0 cmluZz1ZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc2VvVGh1bWJzLnRoYW5r c01zZ0xnZEluO31lbHNle3ZhciBzdHJpbmc9WUFIT08uU2VhcmNoLkFuc3dlcnMu bGFiZWxzLnNlb1RodW1icy50aGFua3NNc2cucmVwbGFjZSgvJWJvbGQlLywnPHN0 cm9uZz4nKTtzdHJpbmc9c3RyaW5nLnJlcGxhY2UoLyVlbmRfYm9sZCUvLCc8L3N0 cm9uZz4nKTtzdHJpbmc9c3RyaW5nLnJlcGxhY2UoLyVhJS8sJzxhIGhyZWY9Ii9t eS9teSI+Jyk7c3RyaW5nPXN0cmluZy5yZXBsYWNlKC8lZW5kX2ElLywnPC9hPicp O30KWUFIT08udXRpbC5Eb20uYWRkQ2xhc3MoaGQsWUFIT08uU2VhcmNoLkFuc3dl cnMuY3NzLnNlb1RodW1icy55ZXNIZENsYXNzKTtoZC5pbm5lckhUTUw9c3RyaW5n O319CmVsc2UgaWYoY2xpY2tlZD09PVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5z ZW9UaHVtYnMuZG93bklkKQp7dmFyIGhkPXJhdGVyLmdldEVsZW1lbnRzQnlUYWdO YW1lKCdoNCcpWzBdO3ZhciBjb250YWluZXJzPVlBSE9PLnV0aWwuRG9tLmdldEVs ZW1lbnRzQnlDbGFzc05hbWUoWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnNlb1Ro dW1icy5jb250YWluZXJDbGFzcywnZGl2JyxyYXRlcik7aWYoaGQmJmNvbnRhaW5l cnMubGVuZ3RoPjApe3ZhciBjb250YWluZXI9Y29udGFpbmVyc1swXTtoZC5pbm5l ckhUTUw9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnNlb1RodW1icy50ZXh0 QXJlYUJMYWJlbDt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7 Zi5hY3Rpb249Jy9xdWVzdGlvbi8nO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoJ2xhYmVsJyk7bC5pbm5lckhUTUw9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFi ZWxzLnNlb1RodW1icy50ZXh0QXJlYVNMYWJlbDtsLnNldEF0dHJpYnV0ZSgnZm9y JywneWFuLXNlby1hbnN3ZXInKTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50 KCdpbnB1dCcpO2gudHlwZT0naGlkZGVuJztoLnZhbHVlPSdhc2snO2gubmFtZT0n bGluayc7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTt0 Lm5hbWU9J3RpdGxlJzt0LmlkPSd5YW4tc2VvLWFuc3dlcic7dmFyIHA9ZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgncCcpO3AuY2xhc3NOYW1lPSdjdGEnO3ZhciBiPWRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO2IubmFtZT0nc3VibWl0Jzti LmNsYXNzTmFtZT0nYmx1ZSc7WUFIT08udXRpbC5FdmVudC5vbihiLCdjbGljaycs ZnVuY3Rpb24oZSl7dGhpcy5mb3JtLnN1Ym1pdCgpO30pO2IuaW5uZXJIVE1MPSc8 c3Bhbj48c3Bhbj48c3Bhbj48c3Bhbj4nK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxh YmVscy5zZW9UaHVtYnMuYnV0dG9uTGFiZWwrJzxcL3NwYW4+PFwvc3Bhbj48XC9z cGFuPjxcL3NwYW4+JztwLmFwcGVuZENoaWxkKGIpO2YuYXBwZW5kQ2hpbGQobCk7 Zi5hcHBlbmRDaGlsZChoKTtmLmFwcGVuZENoaWxkKHQpO2YuYXBwZW5kQ2hpbGQo cCk7WUFIT08uU2VhcmNoLkFuc3dlcnMubGltaXRDaGFyYWN0ZXJzKHQsWUFIT08u U2VhcmNoLkFuc3dlcnMubGFiZWxzLnNlb1RodW1icy5saW1pdCx0cnVlLFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5saW1pdENoYXJhY3RlcnMuc3RhdHVzQ291 bnQsImJsb2NrIixZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYXNrTWluaS5jb3Vu dENsYXNzKTtjb250YWluZXIuYXBwZW5kQ2hpbGQoZik7fX19CmZ1bmN0aW9uIGNh bGxiYWNrRmFpbChvKXt9CnJldHVybntpbml0OmZ1bmN0aW9uKCl7cmF0ZXI9ZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLnNl b1RodW1icy5yYXRlSWQpO2lmKHJhdGVyKXt2YXIgdGh1bWJzPXJhdGVyLmdldEVs ZW1lbnRzQnlUYWdOYW1lKCd1bCcpWzBdO2lmKHRodW1icyl7WUFIT08udXRpbC5F dmVudC5vbih0aHVtYnMsJ2NsaWNrJyxoYW5kbGVDbGljayk7fX19fTt9KCk7WUFI T08uU2VhcmNoLkFuc3dlcnMuVXNlcj1mdW5jdGlvbigpe3JldHVybntnZXROaWNr OmZ1bmN0aW9uKCl7cmV0dXJuIFlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlD bGFzc05hbWUoJ2ZuJywnYScsZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1t eXN0YXR1cycpKVswXS5maXJzdENoaWxkLm5vZGVWYWx1ZTt9LGdldEF2YXRhcjpm dW5jdGlvbigpe3JldHVybiBZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xh c3NOYW1lKCdwaG90bycsJ2ltZycsZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lh bi1teXN0YXR1cycpKVswXS5zcmM7fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJz LmludGVyZXN0aW5nTGlzdD1mdW5jdGlvbigpe3ZhciBkcm9wZG93bjtmdW5jdGlv biBoYW5kbGVTdGFyKGUsYXJncyl7aWYoYXJnc1syXSl7dmFyIGNvbnRhaW5lcj1k b2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWludGVyZXN0aW5nLW1lbnUnKTt2 YXIgbGlzdD1jb250YWluZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29sJylbMF07 aWYoYXJnc1sxXSl7aWYoIVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFz c05hbWUoJ3lvdScsJ2xpJyxsaXN0KVswXSl7aWYoIWxpc3Qpe2xpc3Q9ZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnb2wnKTt2YXIgcD1ZQUhPTy51dGlsLkRvbS5nZXRF bGVtZW50c0J5Q2xhc3NOYW1lKCdiZCcsJ3AnLGNvbnRhaW5lcilbMF07cC5wYXJl bnROb2RlLnJlcGxhY2VDaGlsZChsaXN0LHApO30KdmFyIGxpc3RJdGVtPWRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3Mo bGlzdEl0ZW0sJ3lvdScpO1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKGxpc3RJdGVt LCd2Y2FyZCcpO3ZhciBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTts aW5rLmhyZWY9Jy9teS9teSc7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3MobGluaywn Zm4nKTtZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyhsaW5rLCduaWNrJyk7dmFyIGlt Zz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtpbWcuc3JjPVlBSE9PLlNl YXJjaC5BbnN3ZXJzLlVzZXIuZ2V0QXZhdGFyKCk7aW1nLndpZHRoPTE2O2ltZy5o ZWlnaHQ9MTY7aW1nLmFsdD0nJztsaW5rLmFwcGVuZENoaWxkKGltZyk7bGluay5h cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShZQUhPTy5TZWFyY2gu QW5zd2Vycy5sYWJlbHMuaW50ZXJlc3RpbmdMaXN0LnlvdSkpO2xpc3RJdGVtLmFw cGVuZENoaWxkKGxpbmspO2lmKGxpc3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xp JykubGVuZ3RoPjAmJmxpc3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJykubGVu Z3RoPDUwKXtsaXN0Lmluc2VydEJlZm9yZShsaXN0SXRlbSxsaXN0LmZpcnN0Q2hp bGQpO30KZWxzZXtsaXN0LmFwcGVuZENoaWxkKGxpc3RJdGVtKTt9CnZhciBjb3Vu dD1ZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb3VudCcs J3NwYW4nLGNvbnRhaW5lcik7aWYoY291bnQubGVuZ3RoPjApe2NvdW50WzBdLmlu bmVySFRNTD1wYXJzZUludChZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xh c3NOYW1lKCdjb3VudCcsJ3NwYW4nLGNvbnRhaW5lcilbMF0uaW5uZXJIVE1MLDEw KSsxO319fQplbHNle3ZhciB5b3U9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNC eUNsYXNzTmFtZSgneW91JywnbGknLGxpc3QpWzBdO2lmKHlvdSl7bGlzdC5yZW1v dmVDaGlsZCh5b3UpO2lmKGxpc3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJyku bGVuZ3RoPT09MCl7dGV4dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7WUFI T08udXRpbC5Eb20uYWRkQ2xhc3ModGV4dCwnYmQnKTt0ZXh0LmlubmVySFRNTD1Z QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuaW50ZXJlc3RpbmdMaXN0Lm5vU3Rh cnM7dmFyIG9sPWNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2wnKVsw XTtvbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0ZXh0LG9sKTt9fQp2YXIgY291 bnQ9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY291bnQn LCdzcGFuJyxjb250YWluZXIpO2lmKGNvdW50Lmxlbmd0aD4wKXtjb3VudFswXS5p bm5lckhUTUw9cGFyc2VJbnQoWUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNs YXNzTmFtZSgnY291bnQnLCdzcGFuJyxjb250YWluZXIpWzBdLmlubmVySFRNTCkt MTt9fQppZihsaXN0JiZsaXN0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpLmxl bmd0aD4wKXtpZihsaXN0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpLmxlbmd0 aDw1MCl7dmFyIGl0PWxpc3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJyk7WUFI T08udXRpbC5Eb20ucmVtb3ZlQ2xhc3MoaXQsWUFIT08uU2VhcmNoLkFuc3dlcnMu Y3NzLnNob3dDbGFzcyk7Zm9yKHZhciBqPTA7ajwxMjtqKyspe1lBSE9PLnV0aWwu RG9tLmFkZENsYXNzKGl0W2pdLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5zaG93 Q2xhc3MpO30KaWYoIVlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKGxpc3QsWUFIT08u U2VhcmNoLkFuc3dlcnMuY3NzLnNob3dDbGFzcykmJml0Lmxlbmd0aD4xMil7dmFy IHRyaWdnZXI9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShZ QUhPTy5TZWFyY2guQW5zd2Vycy5jc3MubW9yZUxpc3QubW9yZUNsYXNzLCdhJyxj b250YWluZXIpWzBdO2lmKCF0cmlnZ2VyKXt0cmlnZ2VyPWRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoJ2EnKTtZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyh0cmlnZ2VyLFlB SE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5tb3JlTGlzdC5tb3JlQ2xhc3MpO3RyaWdn ZXIuc2V0QXR0cmlidXRlKCdocmVmJywnIycpO2xpc3QucGFyZW50Tm9kZS5hcHBl bmRDaGlsZCh0cmlnZ2VyKTt9CnRyaWdnZXIuaW5uZXJIVE1MPVlBSE9PLlNlYXJj aC5BbnN3ZXJzLmxhYmVscy5hbGxMYWJlbC5yZXBsYWNlKC8lY291bnQlLyxpdC5s ZW5ndGgpO319fX19CnJldHVybntkaXNwbGF5TWVzc2FnZTpmdW5jdGlvbihtc2cp e3ZhciBtZW51PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4taW50ZXJlc3Rp bmctbWVudScpO2lmKG1lbnUpe3ZhciBoZWFkZXI9bWVudS5nZXRFbGVtZW50c0J5 VGFnTmFtZSgnaDInKVswXS5uZXh0U2libGluZztoZWFkZXIucGFyZW50Tm9kZS5p bnNlcnRCZWZvcmUobXNnLGhlYWRlcik7fX0saW5pdDpmdW5jdGlvbigpe3ZhciBp bnRlcmVzdGluZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWludGVyZXN0 aW5nJyk7aWYoaW50ZXJlc3Rpbmcpe1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnN0YXJF dmVudC5zdWJzY3JpYmUoaGFuZGxlU3Rhcik7dmFyIGhlYWRpbmc9ZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnaDInKTt2YXIgaGVhZGluZ1RleHQ9aW50ZXJlc3Rpbmcu Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gyJylbMF0uZ2V0RWxlbWVudHNCeVRhZ05h bWUoJ2EnKTtpZihoZWFkaW5nVGV4dC5sZW5ndGg+MCl7aGVhZGluZ1RleHQ9aW50 ZXJlc3RpbmcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gyJylbMF0uZ2V0RWxlbWVu dHNCeVRhZ05hbWUoJ2EnKVswXS5maXJzdENoaWxkLm5vZGVWYWx1ZTt9CmVsc2V7 aGVhZGluZ1RleHQ9aW50ZXJlc3RpbmcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gy JylbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NwYW4nKVswXS5maXJzdENoaWxk Lm5vZGVWYWx1ZTt9CmhlYWRpbmcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl VGV4dE5vZGUoaGVhZGluZ1RleHQpKTtpbnRlcmVzdGluZy5yZXBsYWNlQ2hpbGQo aGVhZGluZyxpbnRlcmVzdGluZy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaDInKVsw XSk7dmFyIGNvbnRlbnRzPWludGVyZXN0aW5nLmlubmVySFRNTDt2YXIgc3RhcnRo aXM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1zdGFydGhpcycpO2lmKHN0 YXJ0aGlzKXtkcm9wZG93bj1uZXcgWUFIT08ud2lkZ2V0Lk92ZXJsYXkoaW50ZXJl c3RpbmcuaWQrWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmFjdGlvbkJhci5tZW51 UG9zdGZpeCx7dmlzaWJsZTpmYWxzZSxjb25zdHJhaW50b3ZpZXdwb3J0OmZhbHNl LHpJbmRleDoyfSk7ZHJvcGRvd24uc2V0Qm9keShjb250ZW50cyk7aW50ZXJlc3Rp bmcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnRlcmVzdGluZyk7ZHJvcGRvd24u cmVuZGVyKHN0YXJ0aGlzKTt2YXIgaG92ZXJUaW1lcjtZQUhPTy51dGlsLkV2ZW50 Lm9uKHN0YXJ0aGlzLCdtb3VzZW92ZXInLGZ1bmN0aW9uKGUpe2Ryb3Bkb3duLmNm Zy5zZXRQcm9wZXJ0eSgnY29udGV4dCcsW3RoaXMsJ3RsJywnYmwnXSk7ZHJvcGRv d24uc2hvdygpO2NsZWFyVGltZW91dChob3ZlclRpbWVyKTt9KTtZQUhPTy51dGls LkV2ZW50Lm9uKHN0YXJ0aGlzLCdtb3VzZW91dCcsZnVuY3Rpb24oZSl7aG92ZXJU aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHN0YXR1cz1ZQUhPTy51dGls LkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGFyLXN0YXR1cycsJ3AnLCd5 YW4taW50ZXJlc3RpbmctbWVudScpO2lmKHN0YXR1cy5sZW5ndGg+MCl7c3RhdHVz WzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3RhdHVzWzBdKTt9CmRyb3Bkb3du LmhpZGUoKTt9LDUwMCk7fSk7WUFIT08udXRpbC5FdmVudC5vbihzdGFydGhpcy5n ZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpLCdmb2N1cycsZnVuY3Rpb24oZSl7dmFy IHNlbGY9WUFIT08udXRpbC5Eb20uZ2V0QW5jZXN0b3JCeUNsYXNzTmFtZSh0aGlz LCdtZW51Jyk7ZHJvcGRvd24uY2ZnLnNldFByb3BlcnR5KCdjb250ZXh0Jyxbc2Vs ZiwndGwnLCdibCddKTtkcm9wZG93bi5zaG93KCk7Y2xlYXJUaW1lb3V0KGhvdmVy VGltZXIpO30pO1lBSE9PLnV0aWwuRXZlbnQub24oc3RhcnRoaXMuZ2V0RWxlbWVu dHNCeVRhZ05hbWUoJ2EnKSwnYmx1cicsZnVuY3Rpb24oZSl7dmFyIHNlbGY9WUFI T08udXRpbC5Eb20uZ2V0QW5jZXN0b3JCeUNsYXNzTmFtZSh0aGlzLCdtZW51Jyk7 aG92ZXJUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZHJvcGRvd24uaGlkZSgp O30sNTAwKTt9KTt2YXIgbGltaXQ9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNC eUNsYXNzTmFtZSgnbGltaXQnLCdwJywneWFuLWludGVyZXN0aW5nLW1lbnUnKTtp ZihsaW1pdC5sZW5ndGg+MCl7bGltaXRbMF0uaW5uZXJIVE1MPWxpbWl0WzBdLmlu bmVySFRNTC5yZXBsYWNlKC9cYjUwXGIvLCcxMicpO319fX19O30oKTtZQUhPTy5T ZWFyY2guQW5zd2Vycy5jb25maXJtYXRpb25zPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g Y29uZmlybShlKXt2YXIgc2VsZWN0b3I9ZmFsc2U7aWYodGhpcy5pZCE9PScnKXtz ZWxlY3Rvcj10aGlzLmlkO31lbHNle3NlbGVjdG9yPXRoaXMuY2xhc3NOYW1lO30K aWYoIXdpbmRvdy5jb25maXJtKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5j b25maXJtYXRpb25zW3NlbGVjdG9yXSkpe1lBSE9PLnV0aWwuRXZlbnQucHJldmVu dERlZmF1bHQoZSk7fX0KcmV0dXJue2luaXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGk9 MCxsPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5jb25maXJtYXRpb25zLnNlbGVj dG9ycy5sZW5ndGg7aTxsO2krKyl7dmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRC eUlkKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5jb25maXJtYXRpb25zLnNlbGVj dG9yc1tpXSk7aWYoZWwpe1lBSE9PLnV0aWwuRXZlbnQub24oZWwsJ2NsaWNrJyxj b25maXJtKTt9ZWxzZXt2YXIgZWxzPVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRz QnlDbGFzc05hbWUoWUFIT08uU2VhcmNoLkFuc3dlcnMuY3NzLmNvbmZpcm1hdGlv bnMuc2VsZWN0b3JzW2ldLCdhJyk7aWYoZWxzLmxlbmd0aD4wKXtZQUhPTy51dGls LkV2ZW50Lm9uKGVscywnY2xpY2snLGNvbmZpcm0pO319fX19O30oKTtZQUhPTy5T ZWFyY2guQW5zd2Vycy5zcGVsbENoZWNrZXI9ZnVuY3Rpb24oKXt2YXIgYmVpbmdD aGVja2VkPWZhbHNlLGN1cnJlbnRJbmRleD1mYWxzZSxjdXJyZW50T2Zmc2V0PTAs b3RoZXJXb3JkcyxzdWdnZXN0ZWRXb3JkLHNwZWxsaW5nLGN1cixvZmZzZXQsYWx0 ZXJuYXRpdmVzLGRpdixjb250YWluZXI9ZmFsc2UsZG9uZSxpZ25vcmUsY2hhbmdl LG9iajtmdW5jdGlvbiBjaGVja1NwZWxsaW5nKGUsdG9DaGVjayxpbnNlcnRBZnRl cixqc29uKXtpZihlKXtZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUp O30KaWYoY29udGFpbmVyKXtyZXR1cm47fQpZQUhPTy5TZWFyY2guQW5zd2Vycy5z cGVsbENoZWNrU3RhcnRlZC5maXJlKCk7Y29udGFpbmVyPWRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoJ2RpdicpO2Rpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYn KTtjb250YWluZXIuYXBwZW5kQ2hpbGQoZGl2KTtpZihpbnNlcnRBZnRlcil7dmFy IGFmdGVyRWw9WUFIT08udXRpbC5Eb20uZ2V0TmV4dFNpYmxpbmcodG9DaGVjayk7 aWYoYWZ0ZXJFbCYmWUFIT08udXRpbC5Eb20uaGFzQ2xhc3MoYWZ0ZXJFbCwnY291 bnQtY2hhcnMnKSl7WUFIT08udXRpbC5Eb20uaW5zZXJ0QWZ0ZXIoY29udGFpbmVy LHRvQ2hlY2submV4dFNpYmxpbmcpO30KZWxzZXtZQUhPTy51dGlsLkRvbS5pbnNl cnRBZnRlcihjb250YWluZXIsdG9DaGVjayk7fX0KZWxzZQp7WUFIT08udXRpbC5E b20uaW5zZXJ0QmVmb3JlKGNvbnRhaW5lcix0b0NoZWNrKTt9CmN1cnJlbnRPZmZz ZXQ9MDtpZihqc29uKXtiZWluZ0NoZWNrZWQ9dG9DaGVjaztjb250YWluZXIuY2xh c3NOYW1lPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5zcGVsbENoZWNrZXIuY29u dGFpbmVyO2Rpdi5pbm5lckhUTUw9Jyc7Y2hlY2tlckRpc3BsYXkoKTtpZihqc29u Lmxlbmd0aD4wKXtjdXJyZW50SW5kZXg9MDtvYmo9anNvbjtjb3JyZWN0U3BlbGxp bmcoKTt9ZWxzZXtub01pc3Rha2VzKCk7fX0KZWxzZXt2YXIgdG9TZW5kPXRvQ2hl Y2sudmFsdWU/dG9DaGVjay52YWx1ZTonJztpZih0b1NlbmQhPT0nJyl7YmVpbmdD aGVja2VkPXRvQ2hlY2s7dmFyIHVybD0nL2NvbW1vbi91dGlsL2tzLXNwZWxsY2hl Y2sucGhwP2lmb3JtYXQ9dGV4dCZvZm9ybWF0PWpzJnRleHQ9Jyt0b1NlbmQrJyZs YW5nPScrWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnNwZWxsQ2hlY2tlci51 c2VMYW5nO3ZhciBjYWxsYmFjaz17c3VjY2VzczpjYWxsYmFja1N1Y2Nlc3MsZmFp bHVyZTpjYWxsYmFja0ZhaWx9O1lBSE9PLnV0aWwuQ29ubmVjdC5hc3luY1JlcXVl c3QoJ0dFVCcsdXJsLGNhbGxiYWNrKTtkaXYuaW5uZXJIVE1MPSc8aW1nIHNyYz0i aHR0cDovL2wueWltZy5jb20vYS9pL3VzL3BpbS9kY2xpZW50L2ltZy9tZDUvYzhh ZDk4NDVjOTQxNDQyNGNiNTg1NDIzOGFmMjEyYjBfMS5naWYiPic7fWVsc2V7Y2hl Y2tlckRpc3BsYXkoKTtub01pc3Rha2VzKCk7fX19CmZ1bmN0aW9uIGNoZWNrZXJE aXNwbGF5KCl7Y29udGFpbmVyLmNsYXNzTmFtZT1ZQUhPTy5TZWFyY2guQW5zd2Vy cy5jc3Muc3BlbGxDaGVja2VyLmNvbnRhaW5lcjt2YXIgYnV0dG9ucz1kb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdkaXYnKTtidXR0b25zLmNsYXNzTmFtZT0nc3BlbGxj aGVjay1idXR0b25zJztjaGFuZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0 dG9uJyk7Y2hhbmdlLmlubmVySFRNTD1ZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMuc3BlbGxDaGVja2VyLmJ1dHRvbkNoYW5nZTtZQUhPTy51dGlsLkRvbS5hZGRD bGFzcyhjaGFuZ2UsJ2NoYW5nZScpO2lmKGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY2hh bmdlKSl7WUFIT08udXRpbC5FdmVudC5vbihjaGFuZ2UsJ2NsaWNrJyxjaGFuZ2VX b3JkKTt9Cmlnbm9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtp Z25vcmUuaW5uZXJIVE1MPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5zcGVs bENoZWNrZXIuYnV0dG9uSWdub3JlO1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKGln bm9yZSwnaWdub3JlJyk7aWYoYnV0dG9ucy5hcHBlbmRDaGlsZChpZ25vcmUpKXtZ QUhPTy51dGlsLkV2ZW50Lm9uKGlnbm9yZSwnY2xpY2snLGZ1bmN0aW9uKGUpe1lB SE9PLnV0aWwuRXZlbnQucHJldmVudERlZmF1bHQoZSk7Y3VycmVudEluZGV4Kys7 Y29ycmVjdFNwZWxsaW5nKCk7fSk7fQpkb25lPWRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoJ2J1dHRvbicpO2RvbmUuaW5uZXJIVE1MPVlBSE9PLlNlYXJjaC5BbnN3ZXJz LmxhYmVscy5zcGVsbENoZWNrZXIuYnV0dG9uRG9uZTtZQUhPTy51dGlsLkRvbS5h ZGRDbGFzcyhkb25lLCdkb25lJyk7aWYoYnV0dG9ucy5hcHBlbmRDaGlsZChkb25l KSl7WUFIT08udXRpbC5FdmVudC5vbihkb25lLCdjbGljaycsZnVuY3Rpb24oZSl7 WUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChlKTtiZWluZ0NoZWNrZWQ9 ZmFsc2U7Y2hlY2tlckNsb3NlKCk7fSk7fQpjb250YWluZXIuYXBwZW5kQ2hpbGQo YnV0dG9ucyk7fQpmdW5jdGlvbiBjaGVja2VyQ2xvc2UoKXtpZihjb250YWluZXIp e2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7Y29u dGFpbmVyPW51bGw7b3RoZXJXb3Jkcz1udWxsO2JlaW5nQ2hlY2tlZD1mYWxzZTt9 fQpmdW5jdGlvbiBjYWxsYmFja1N1Y2Nlc3Mobyl7dmFyIHJlc3BvbnNlPWV2YWwo JygnK28ucmVzcG9uc2VUZXh0KycpJyk7Y29udGFpbmVyLmNsYXNzTmFtZT1ZQUhP Ty5TZWFyY2guQW5zd2Vycy5jc3Muc3BlbGxDaGVja2VyLmNvbnRhaW5lcjtkaXYu aW5uZXJIVE1MPScnO2NoZWNrZXJEaXNwbGF5KCk7aWYocmVzcG9uc2UubGVuZ3Ro PjApe2N1cnJlbnRJbmRleD0wO29iaj1yZXNwb25zZTtjb3JyZWN0U3BlbGxpbmco KTt9ZWxzZXtub01pc3Rha2VzKCk7fX0KZnVuY3Rpb24gbm9NaXN0YWtlcygpe2Rp di5pbm5lckhUTUw9JzxzdHJvbmc+JytZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMuc3BlbGxDaGVja2VyLm1zZ05vTWlzdGFrZXMrJzwvc3Ryb25nPic7fQpmdW5j dGlvbiBjYWxsYmFja0ZhaWwoKXtyZXR1cm47fQpmdW5jdGlvbiBzcGVsbGluZ0Zp bmlzaGVkKCl7WUFIT08uU2VhcmNoLkFuc3dlcnMuc3BlbGxDaGVja0NvbXBsZXRl LmZpcmUoKTtpZ25vcmUuZGlzYWJsZWQ9dHJ1ZTtjaGFuZ2UuZGlzYWJsZWQ9dHJ1 ZTtkaXYuaW5uZXJIVE1MPSc8c3Ryb25nPicrWUFIT08uU2VhcmNoLkFuc3dlcnMu bGFiZWxzLnNwZWxsQ2hlY2tlci5tc2dOb01vcmUrJzwvc3Ryb25nPic7fQpmdW5j dGlvbiBjb3JyZWN0U3BlbGxpbmcoKXtpZihjdXJyZW50SW5kZXg9PT1vYmoubGVu Z3RoKXtzcGVsbGluZ0ZpbmlzaGVkKCk7fQppZihvYmpbY3VycmVudEluZGV4XSl7 Y3VyPW9ialtjdXJyZW50SW5kZXhdO29mZnNldD1wYXJzZUludChjdXIub2Zmc2V0 LDEwKStwYXJzZUludChjdXJyZW50T2Zmc2V0LDEwKTthbHRlcm5hdGl2ZXM9Y3Vy LnN1Z2dlc3Rpb25zO2lmKCFvdGhlcldvcmRzKXt2YXIgc3VnZ2VzdGVkQ29udGFp bmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1lBSE9PLnV0aWwuRG9t LmFkZENsYXNzKHN1Z2dlc3RlZENvbnRhaW5lciwnY2hhbmdldG8nKTt2YXIgc3Vn Z2VzdGVkV29yZExhYmVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7 c3VnZ2VzdGVkV29yZExhYmVsLmlubmVySFRNTD1ZQUhPTy5TZWFyY2guQW5zd2Vy cy5sYWJlbHMuc3BlbGxDaGVja2VyLmxhYmVsQ2hhbmdlO3N1Z2dlc3RlZFdvcmRM YWJlbC5zZXRBdHRyaWJ1dGUoJ2ZvcicsWUFIT08uU2VhcmNoLkFuc3dlcnMuY3Nz LnNwZWxsQ2hlY2tlci5zdWdnZXN0ZWRMYWJlbCk7c3VnZ2VzdGVkV29yZD1kb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO3N1Z2dlc3RlZFdvcmQudHlwZT0n dGV4dCc7c3VnZ2VzdGVkV29yZC5pZD1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Mu c3BlbGxDaGVja2VyLnN1Z2dlc3RlZExhYmVsO3N1Z2dlc3RlZENvbnRhaW5lci5h cHBlbmRDaGlsZChzdWdnZXN0ZWRXb3JkTGFiZWwpO3N1Z2dlc3RlZENvbnRhaW5l ci5hcHBlbmRDaGlsZChzdWdnZXN0ZWRXb3JkKTtkaXYuYXBwZW5kQ2hpbGQoc3Vn Z2VzdGVkQ29udGFpbmVyKTt2YXIgb3RoZXJXb3Jkc0NvbnRhaW5lcj1kb2N1bWVu dC5jcmVhdGVFbGVtZW50KCdkaXYnKTtZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyhv dGhlcldvcmRzQ29udGFpbmVyLCdvdGhlcndvcmRzJyk7dmFyIG90aGVyV29yZHNM YWJlbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO290aGVyV29yZHNM YWJlbC5pbm5lckhUTUw9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnNwZWxs Q2hlY2tlci5sYWJlbFN1Z2dlc3Rpb247b3RoZXJXb3Jkc0xhYmVsLnNldEF0dHJp YnV0ZSgnZm9yJyxZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3BlbGxDaGVja2Vy Lm90aGVyTGFiZWwpO290aGVyV29yZHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn c2VsZWN0Jyk7b3RoZXJXb3Jkcy5pZD1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3Mu c3BlbGxDaGVja2VyLm90aGVyTGFiZWw7b3RoZXJXb3Jkcy5zaXplPTM7b3RoZXJX b3Jkc0NvbnRhaW5lci5hcHBlbmRDaGlsZChvdGhlcldvcmRzTGFiZWwpO290aGVy V29yZHNDb250YWluZXIuYXBwZW5kQ2hpbGQob3RoZXJXb3Jkcyk7ZGl2LmFwcGVu ZENoaWxkKG90aGVyV29yZHNDb250YWluZXIpO2Rpdi5pbm5lckhUTUw9ZGl2Lmlu bmVySFRNTDtvdGhlcldvcmRzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5zcGVsbENoZWNrZXIub3RoZXJMYWJlbCk7c3Vn Z2VzdGVkV29yZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChZQUhPTy5TZWFyY2gu QW5zd2Vycy5jc3Muc3BlbGxDaGVja2VyLnN1Z2dlc3RlZExhYmVsKTtZQUhPTy51 dGlsLkV2ZW50Lm9uKG90aGVyV29yZHMsJ2NoYW5nZScsY2hhbmdlU2VsZWN0aW9u KTt9Cm90aGVyV29yZHMub3B0aW9ucy5sZW5ndGg9MDtmb3IodmFyIGk9MCxsPWFs dGVybmF0aXZlcy5sZW5ndGg7aTxsO2krKyl7dmFyIG89ZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgnb3B0aW9uJyk7by5pbm5lckhUTUw9YWx0ZXJuYXRpdmVzW2ldO28u c2V0QXR0cmlidXRlKCd2YWx1ZScsYWx0ZXJuYXRpdmVzW2ldKTtvdGhlcldvcmRz LmFwcGVuZENoaWxkKG8pO30Kb3RoZXJXb3Jkcy5zZWxlY3RlZEluZGV4PTA7c3Vn Z2VzdGVkV29yZC52YWx1ZT1hbHRlcm5hdGl2ZXNbMF18fCcnO2lmKHR5cGVvZihi ZWluZ0NoZWNrZWQuc2VsZWN0aW9uU3RhcnQpPT0nbnVtYmVyJyl7c2V0VGltZW91 dChmdW5jdGlvbigpe2JlaW5nQ2hlY2tlZC5mb2N1cygpO2JlaW5nQ2hlY2tlZC5z ZWxlY3QoKTtiZWluZ0NoZWNrZWQuc2VsZWN0aW9uU3RhcnQ9b2Zmc2V0O2JlaW5n Q2hlY2tlZC5zZWxlY3Rpb25FbmQ9b2Zmc2V0K2N1ci53b3JkLmxlbmd0aDt9LDEp O31lbHNlIGlmKGRvY3VtZW50LnNlbGVjdGlvbiYmZG9jdW1lbnQuc2VsZWN0aW9u LmNyZWF0ZVJhbmdlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YmVpbmdDaGVja2Vk LmZvY3VzKCk7YmVpbmdDaGVja2VkLnNlbGVjdCgpO3ZhciByYW5nZT1kb2N1bWVu dC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtyYW5nZS5jb2xsYXBzZSgpO3Jhbmdl Lm1vdmVTdGFydCgnY2hhcmFjdGVyJyxvZmZzZXQpO3JhbmdlLm1vdmVFbmQoJ2No YXJhY3RlcicsY3VyLndvcmQubGVuZ3RoKTtyYW5nZS5zZWxlY3QoKTt9LDEpO319 fQpmdW5jdGlvbiBjaGFuZ2VTZWxlY3Rpb24oZSl7dmFyIHNlbGVjdGVkPXRoaXMu dmFsdWU7c3VnZ2VzdGVkV29yZC52YWx1ZT1zZWxlY3RlZDt9CmZ1bmN0aW9uIGNo YW5nZVdvcmQoZSl7WUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChlKTt2 YXIgbmV3VGV4dD0nJzt2YXIgdz1zdWdnZXN0ZWRXb3JkLnZhbHVlO3ZhciBvbGRU ZXh0PWJlaW5nQ2hlY2tlZC52YWx1ZTtuZXdUZXh0Kz1vbGRUZXh0LnN1YnN0cigw LHBhcnNlSW50KG9mZnNldCwxMCkpO25ld1RleHQrPXc7bmV3VGV4dCs9b2xkVGV4 dC5zdWJzdHIocGFyc2VJbnQob2Zmc2V0LDEwKStwYXJzZUludChjdXIud29yZC5s ZW5ndGgsMTApLHBhcnNlSW50KG9sZFRleHQubGVuZ3RoLDEwKS0ocGFyc2VJbnQo b2Zmc2V0LDEwKStwYXJzZUludChjdXIud29yZC5sZW5ndGgsMTApKSk7YmVpbmdD aGVja2VkLnZhbHVlPW5ld1RleHQ7Y3VycmVudE9mZnNldCs9cGFyc2VJbnQody5s ZW5ndGgsMTApLXBhcnNlSW50KGN1ci53b3JkLmxlbmd0aCwxMCk7Y3VycmVudElu ZGV4Kys7Y29ycmVjdFNwZWxsaW5nKCk7fQpyZXR1cm57aW5pdDpmdW5jdGlvbigp e3ZhciBlbHM9WUFIT08udXRpbC5Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShZ QUhPTy5TZWFyY2guQW5zd2Vycy5jc3Muc3BlbGxDaGVja2VyLmNoZWNrQ2xhc3Ms J3RleHRhcmVhJyk7aWYoZWxzLmxlbmd0aD4wKXtmb3IodmFyIGk9MCxsPWVscy5s ZW5ndGg7aTxsO2krKyl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScp O1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKGEsWUFIT08uU2VhcmNoLkFuc3dlcnMu Y3NzLnNwZWxsQ2hlY2tlci50cmlnZ2VyQ2xhc3MpO2EuaHJlZj0nIyc7YS5pbm5l ckhUTUw9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnNwZWxsQ2hlY2tlci5s YWJlbENoZWNrO2lmKFlBSE9PLnV0aWwuRG9tLmluc2VydEJlZm9yZShhLGVsc1tp XSkpe1lBSE9PLnV0aWwuRXZlbnQub24oYSwnY2xpY2snLGNoZWNrU3BlbGxpbmcs ZWxzW2ldKTt9fX19LGNoZWNrOmZ1bmN0aW9uKGVsLGluc2VydEFmdGVyLGpzb24p e2VsPVlBSE9PLnV0aWwuRG9tLmdldChlbCk7aW5zZXJ0QWZ0ZXI9aW5zZXJ0QWZ0 ZXJ8fGZhbHNlO2NoZWNrU3BlbGxpbmcobnVsbCxlbCxpbnNlcnRBZnRlcixqc29u KTt9LGNsb3NlOmZ1bmN0aW9uKCl7Y2hlY2tlckNsb3NlKCk7fSxnZXRUYXJnZXQ6 ZnVuY3Rpb24oKXtyZXR1cm4gYmVpbmdDaGVja2VkO319O30oKTtZQUhPTy5TZWFy Y2guQW5zd2Vycy5leHRlcm5hbExpbmtzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdGV4 dEZvckV4dGVybmFsKGVsKXtyZXR1cm4oZWwmJmVsLmdldEF0dHJpYnV0ZSgncmVs JykmJihlbC5nZXRBdHRyaWJ1dGUoJ3JlbCcpLm1hdGNoKC9cYmV4dGVybmFsXGIv KXx8ZWwuZ2V0QXR0cmlidXRlKCdyZWwnKS5tYXRjaCgvXGJwb3B1cFxiLykpKTt9 CmZ1bmN0aW9uIG5ld1dpbmRvdyhlKXtpZihlLnNoaWZ0S2V5fHxlLmFsdEtleXx8 ZS5jdHJsS2V5fHxlLm1ldGFLZXkpe3JldHVybiB0cnVlO31lbHNle1lBSE9PLnV0 aWwuRXZlbnQucHJldmVudERlZmF1bHQoZSk7aWYodGhpcy5nZXRBdHRyaWJ1dGUo J3JlbCcpLm1hdGNoKC9cYmV4dGVybmFsXGIvKSl7dmFyIHdpbj13aW5kb3cub3Bl bih0aGlzLmdldEF0dHJpYnV0ZSgnaHJlZicpLCdfYmxhbmsnKTtpZih3aW4pe2lm KHdpbi5mb2N1cyl7d2luLmZvY3VzKCk7fQpyZXR1cm4gZmFsc2U7fQp3aW49bnVs bDt9ZWxzZSBpZih0aGlzLmdldEF0dHJpYnV0ZSgncmVsJykubWF0Y2goL1xicG9w dXBcYi8pKXt2YXIgd2luPXdpbmRvdy5vcGVuKHRoaXMuZ2V0QXR0cmlidXRlKCdo cmVmJyksJ3BvcHVwJywnd2lkdGg9NzAwcHgsaGVpZ2h0PTQyMHB4LHN0YXR1cz0w LGxvY2F0aW9uPTAscmVzaXphYmxlPTEsc2Nyb2xsYmFycz0xJyk7fX0KcmV0dXJu IHRydWU7fQpyZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBlbHM9WUFIT08udXRp bC5Eb20uZ2V0RWxlbWVudHNCeSh0ZXh0Rm9yRXh0ZXJuYWwsJ2EnKTtpZihlbHMu bGVuZ3RoPjApe1lBSE9PLnV0aWwuRXZlbnQub24oZWxzLCdjbGljaycsbmV3V2lu ZG93KTt9fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmFkdmFuY2VkU2VhcmNo PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaGFuZGxlQ2xpY2soZSl7dmFyIHNlYXJjaFRl cm1zPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tcCcpO2lmKCFZQUhPTy51 dGlsLkRvbS5oYXNDbGFzcyhzZWFyY2hUZXJtcywnZGVmYXVsdCcpJiZzZWFyY2hU ZXJtcy52YWx1ZS5sZW5ndGg+MCl7c2VhcmNoVGVybXMuZm9ybS5hY3Rpb249Jy9z ZWFyY2gvc2VhcmNoX2FkdmFuY2UnO3NlYXJjaFRlcm1zLmZvcm0uc3VibWl0KCk7 WUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChlKTt9fQpyZXR1cm57aW5p dDpmdW5jdGlvbigpe1lBSE9PLnV0aWwuRXZlbnQub24oZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ2FkdmFuY2VkLXNlYXJjaCcpLCdjbGljaycsaGFuZGxlQ2xpY2sp O319O30oKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5hc2tGbG93PWZ1bmN0aW9uKCl7 dmFyIENzcz1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYXNrRmxvdyxZdWQ9WUFI T08udXRpbC5Eb20sWXVlPVlBSE9PLnV0aWwuRXZlbnQ7cmV0dXJue2luaXQ6ZnVu Y3Rpb24oKXt2YXIgbGFiZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQ3NzLmxh YmVsTW92ZUZyb20pO2lmKGxhYmVsKXt2YXIgdHh0RmllbGQ9ZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoQ3NzLmxhYmVsTW92ZVRvKTt2YXIgb3JpZ2luYWxWYWx1ZT10 eHRGaWVsZC52YWx1ZTt0eHRGaWVsZC5kZWZhdWx0VmFsdWU9bGFiZWwuaW5uZXJI VE1MO3R4dEZpZWxkLnZhbHVlPW9yaWdpbmFsVmFsdWU7aWYodHh0RmllbGQudmFs dWU9PT1sYWJlbC5pbm5lckhUTUx8fHR4dEZpZWxkLnZhbHVlPT09Jycpe1l1ZC5h ZGRDbGFzcyh0eHRGaWVsZCxDc3MubGFiZWxNb3ZlZENsYXNzKTt0eHRGaWVsZC5k ZWZhdWx0VmFsdWU9bGFiZWwuaW5uZXJIVE1MO3R4dEZpZWxkLnZhbHVlPWxhYmVs LmlubmVySFRNTDt9Cll1ZS5vbih0eHRGaWVsZCwnZm9jdXMnLGZ1bmN0aW9uKGUp e1l1ZC5yZW1vdmVDbGFzcyh0aGlzLENzcy5sYWJlbE1vdmVkQ2xhc3MpO2lmKHRo aXMudmFsdWU9PT1sYWJlbC5pbm5lckhUTUx8fHRoaXMudmFsdWU9PT0nJyl7dGhp cy52YWx1ZT0nJzt9fSk7WXVlLm9uKHR4dEZpZWxkLCdibHVyJyxmdW5jdGlvbihl KXtpZih0aGlzLnZhbHVlPT09Jycpe1l1ZC5hZGRDbGFzcyh0eHRGaWVsZCxDc3Mu bGFiZWxNb3ZlZENsYXNzKTt0aGlzLnZhbHVlPWxhYmVsLmlubmVySFRNTDt9fSk7 WXVlLm9uKHR4dEZpZWxkLCdjaGFuZ2UnLGZ1bmN0aW9uKGUpe2lmKHRoaXMudmFs dWUhPT1sYWJlbC5pbm5lckhUTUwpe1l1ZC5yZW1vdmVDbGFzcyh0aGlzLENzcy5s YWJlbE1vdmVkQ2xhc3MpO319KTtZQUhPTy5TZWFyY2guQW5zd2Vycy5xdWFsaXR5 VGlwcy5hZGRDaGVjayh0eHRGaWVsZCx7J3NwZWxsJzp0cnVlLCdjYXBzJzp0cnVl LCd0b29fc2hvcnQnOnRydWUsJ25vbl9hbHBoYSc6dHJ1ZSwnc2ltaWxhcic6dHJ1 ZX0sdHJ1ZSwncXVlc3Rpb25UaXRsZScpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxp bWl0Q2hhcmFjdGVycyh0eHRGaWVsZCwxMTAsZmFsc2UsWUFIT08uU2VhcmNoLkFu c3dlcnMubGFiZWxzLmxpbWl0Q2hhcmFjdGVycy5zdGF0dXNDb3VudCwiYmxvY2si LFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy5hc2tGbG93LmNvdW50Q2xhc3MsbGFi ZWwuaW5uZXJIVE1MKTt0eHRGaWVsZC5zcGVsbGNoZWNrPXRydWU7fQp2YXIgZGV0 YWlsRmllbGQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1hc2stZGV0YWls cycpO2lmKGRldGFpbEZpZWxkKXtZQUhPTy5TZWFyY2guQW5zd2Vycy5xdWFsaXR5 VGlwcy5hZGRDaGVjayhkZXRhaWxGaWVsZCx7J3NwZWxsJzp0cnVlLCdjYXBzJzp0 cnVlLCdub25fYWxwaGEnOnRydWV9LHRydWUpO1lBSE9PLlNlYXJjaC5BbnN3ZXJz LmxpbWl0Q2hhcmFjdGVycyhkZXRhaWxGaWVsZCw1MDAwLGZhbHNlLFlBSE9PLlNl YXJjaC5BbnN3ZXJzLmxhYmVscy5saW1pdENoYXJhY3RlcnMuc3RhdHVzQ291bnQs ImJsb2NrIixZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYXNrRmxvdy5jb3VudENs YXNzKTt9CnZhciBmb3JtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tYXNr LXByZXZpZXcnKTtpZihmb3JtKXt2YXIgUXRFbD1kb2N1bWVudC5nZXRFbGVtZW50 QnlJZCgneWFuLXF0Jyk7aWYoWXVkLmhhc0NsYXNzKFF0RWwsJ3F0LXZpdGFsaXR5 JykpCntZdWQuc2V0WShRdEVsLFl1ZC5nZXRZKGRvY3VtZW50LmdldEVsZW1lbnRC eUlkKCd5YW4tdml0YWxpdHktc2V0dGluZycpKS0xMyk7fQpZQUhPTy5TZWFyY2gu QW5zd2Vycy5kaXNhYmxlRG91YmxlU3VibWl0KGZvcm0pO319fTt9KCk7WUFIT08u U2VhcmNoLkFuc3dlcnMuZGlzYWJsZURvdWJsZVN1Ym1pdD1mdW5jdGlvbihmb3Jt KXtZQUhPTy51dGlsLkV2ZW50LnJlbW92ZUxpc3RlbmVyKGZvcm0uZ2V0RWxlbWVu dHNCeVRhZ05hbWUoJ2J1dHRvbicpLCdjbGljaycpO1lBSE9PLnV0aWwuRXZlbnQu b24oZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyksJ2NsaWNrJyxm dW5jdGlvbihlKXtZQUhPTy51dGlsLkRvbS5iYXRjaChmb3JtLmdldEVsZW1lbnRz QnlUYWdOYW1lKCdidXR0b24nKSxmdW5jdGlvbihlbCl7ZWwuZGlzYWJsZWQ9dHJ1 ZTtZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyhlbCwnZGlzYWJsZWQnKTt9KTtZQUhP Ty51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1lBSE9PLnV0aWwuRXZlbnQu cmVtb3ZlTGlzdGVuZXIoZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9u JyksJ2NsaWNrJyk7dmFyIGlucHV0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lu cHV0Jyk7aW5wdXQudHlwZT0naGlkZGVuJztpbnB1dC5uYW1lPXRoaXMubmFtZTtp bnB1dC52YWx1ZT10aGlzLnZhbHVlO2Zvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpO2Zv cm0uc3VibWl0KCk7fSk7fQpZQUhPTy5TZWFyY2guQW5zd2Vycy5hbnN3ZXJGbG93 PWZ1bmN0aW9uKCl7dmFyIENzcz1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYW5z d2VyRmxvdyxZdWQ9WUFIT08udXRpbC5Eb20sWXVlPVlBSE9PLnV0aWwuRXZlbnQ7 ZnVuY3Rpb24gZm9jdXNMYWJlbChlKXt2YXIgaWQ9dGhpcy5pZC5yZXBsYWNlKC9m LS8sJycpO2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSYmZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoaWQpLmZvY3VzKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZChpZCkuZm9jdXMoKTt9fQpyZXR1cm57aW5pdDpmdW5jdGlvbigpe2lmKGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tYW5zd2VyLWFuc3dlcicpKXtZQUhPTy5T ZWFyY2guQW5zd2Vycy5xdWFsaXR5VGlwcy5hZGRDaGVjayhkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgneWFuLWFuc3dlci1hbnN3ZXInKSx7J3NwZWxsJzp0cnVlLCdj YXBzJzp0cnVlLCd0b29fc2hvcnQnOmZhbHNlLCdub25fYWxwaGEnOnRydWV9LHRy dWUpO30KaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1hbnN3ZXItd2l0 aGdyb3VwJykpe1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnF1YWxpdHlUaXBzLmFkZENo ZWNrKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tYW5zd2VyLXdpdGhncm91 cCcpLHsnc2hvd19kZWZhdWx0Jzp0cnVlfSxmYWxzZSwnYW5zd2VyR3JvdXAnKTt2 YXIgZm9ybUVsPVl1ZC5nZXQoJ3lhbi1hbnN3ZXItc2VhcmNoLWlubGluZScpO30K dmFyIGZvcm09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1hbnN3ZXItcHJl dmlldycpO2lmKGZvcm0pe3ZhciBRdEVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlk KCd5YW4tcXQnKTtpZihZdWQuaGFzQ2xhc3MoUXRFbCwncXQtdml0YWxpdHknKSkK e1l1ZC5zZXRZKFF0RWwsWXVkLmdldFkoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J3lhbi12aXRhbGl0eS1zZXR0aW5nJykpLTEzKTt9CllBSE9PLlNlYXJjaC5BbnN3 ZXJzLmRpc2FibGVEb3VibGVTdWJtaXQoZm9ybSk7fQp2YXIgZm9ybT1kb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgneWFuLWFuc3dlci1lbnRlcnRleHQnKTtpZihmb3Jt KXtZQUhPTy5TZWFyY2guQW5zd2Vycy5kaXNhYmxlRG91YmxlU3VibWl0KGZvcm0p O30KaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQ3NzLndlYlNlYXJjaEZvcm0p KXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZChDc3Mud2ViU2VhcmNoRm9ybSkudGFy Z2V0PSdfYmxhbmsnO30KdmFyIGVscz1ZdWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZShDc3MuYWN0c0FzTGFiZWwpO2lmKGVscy5sZW5ndGg+MCl7WXVlLm9uKGVscywn Y2xpY2snLGZvY3VzTGFiZWwpO319fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMu cXVhbGl0eVRpcHM9ZnVuY3Rpb24oKXt2YXIgY2xhc3NUb1JlbW92ZT1mYWxzZSx0 eXBlVG9IaWRlPWZhbHNlLENzcz1ZQUhPTy5TZWFyY2guQW5zd2Vycy5jc3MuYXNr RmxvdyxpblByb2dyZXNzPWZhbHNlLGluUHJvZ3Jlc3NFbD1mYWxzZSxwb2xsVGlt ZXIsaGlkZVRpbWVyLGRlZmF1bHRMYWJlbHM9WUFIT08uU2VhcmNoLkFuc3dlcnMu bGFiZWxzLnF1YWxpdHlUaXBzLmRlZmF1bHRMYWJlbHMsUXRFbD1mYWxzZSx0aXBz PXt9LFF0VXJsPScvcXVlc3Rpb24vcXVhbGl0eVRpcHM/dGV4dD0nLFl1Yz1ZQUhP Ty51dGlsLkNvbm5lY3QsWXVkPVlBSE9PLnV0aWwuRG9tLFl1ZT1ZQUhPTy51dGls LkV2ZW50O2Z1bmN0aW9uIHBvbGwoZSl7dmFyIHNlbGY9dGhpczt3aW5kb3cuY2xl YXJUaW1lb3V0KHBvbGxUaW1lcik7dmFyIHdvcmRzPWVuY29kZVVSSUNvbXBvbmVu dCh0aGlzLnZhbHVlKTtwb2xsVGltZXI9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rp b24oKXtnZXRUaXBzKHNlbGYpO30sODAwKTt9CmZ1bmN0aW9uIGdldFRpcHMoZWwp e3ZhciBjYWxsYmFjaz17c3VjY2VzczpjYWxsYmFja1N1Y2Nlc3MsZmFpbHVyZTpj YWxsYmFja0ZhaWwsdGltZW91dDo3MDAwLGFyZ3VtZW50OmVsfTtZQUhPTy51dGls LkNvbm5lY3QuYWJvcnQoaW5Qcm9ncmVzcyxjYWxsYmFjayk7aWYoWUFIT08uU2Vh cmNoLkFuc3dlcnMuc3BlbGxDaGVja2VyLmdldFRhcmdldCgpPT09ZWwpe3JlbmRl clRpcChlbCwnc3BlbGxfb3BlbicpO30KZWxzZSBpZighWUFIT08udXRpbC5Db25u ZWN0LmlzQ2FsbEluUHJvZ3Jlc3MoaW5Qcm9ncmVzcykmJmVsLnZhbHVlLmxlbmd0 aD41JiZlbC52YWx1ZSE9PWVsLmRlZmF1bHRWYWx1ZSl7dmFyIHVybD1RdFVybCtl bmNvZGVVUklDb21wb25lbnQoZWwudmFsdWUpKycmY3VydGltZT0nKyhuZXcgRGF0 ZSgpLmdldFRpbWUoKS50b1N0cmluZygpKTt2YXIgY2xvc2VkQ2FzZXM9Jyc7Zm9y KGNsb3NlZENhc2UgaW4gdGlwc1tlbC5pZF0uY2xvc2VkQ2FzZXMpCntjbG9zZWRD YXNlcys9Y2xvc2VkQ2FzZSsnLCc7fQp1cmwrPScmY2xvc2VkPScrZW5jb2RlVVJJ Q29tcG9uZW50KGNsb3NlZENhc2VzKTtpZih0aXBzW2VsLmlkXS5vcHRpb25zLnNp bWlsYXIpCnt1cmwrPScmc2ltaWxhcj0xJzt9CmluUHJvZ3Jlc3M9WUFIT08udXRp bC5Db25uZWN0LmFzeW5jUmVxdWVzdCgnUE9TVCcsdXJsLGNhbGxiYWNrKTt9CmVs c2UgaWYoIVlBSE9PLnV0aWwuQ29ubmVjdC5pc0NhbGxJblByb2dyZXNzKGluUHJv Z3Jlc3MpJiZlbC52YWx1ZS5sZW5ndGg9PT0wJiZ0aXBzW2VsLmlkXS5vcHRpb25z LnNob3dfZGVmYXVsdCl7cmVuZGVyVGlwKGVsLCdkZWZhdWx0Jyk7fX0KZnVuY3Rp b24gY2xvc2VUaXAoKXtZQUhPTy5TZWFyY2guQW5zd2Vycy5xdWFsaXR5VGlwSGlk ZGVuLmZpcmUoKTtZdWQuYWRkQ2xhc3MoUXRFbCwnY2xvc2VkJyk7ZGltQ29udGVu dCgpO30KZnVuY3Rpb24gZGltQ29udGVudCgpe3ZhciBzaWRlYmFyPWRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCd5YW4tYW5zd2VyLXNlYXJjaC1pbmxpbmUnKTtpZihz aWRlYmFyKXt2YXIgY2hpbGRyZW49WUFIT08udXRpbC5Eb20uZ2V0Q2hpbGRyZW4o c2lkZWJhcik7dmFyIHF0UmVnaW9uPVlBSE9PLnV0aWwuRG9tLmdldFJlZ2lvbihR dEVsKTtmb3IoY2hpbGQgaW4gY2hpbGRyZW4pe2lmKHF0UmVnaW9uJiZxdFJlZ2lv bi5pbnRlcnNlY3QoWUFIT08udXRpbC5Eb20uZ2V0UmVnaW9uKGNoaWxkcmVuW2No aWxkXSkpKXtZdWQuc2V0U3R5bGUoY2hpbGRyZW5bY2hpbGRdLCdvcGFjaXR5Jywn MC4yJyk7fQplbHNle1l1ZC5zZXRTdHlsZShjaGlsZHJlbltjaGlsZF0sJ29wYWNp dHknLCcxJyk7fX19fQpmdW5jdGlvbiBwb3NpdGlvblF0KGVsKXtpZihRdEVsKXtZ dWQucmVtb3ZlQ2xhc3MoUXRFbCwnY2xvc2VkJyk7dmFyIGNsb3NlPWRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCd5YW4tcXQtY2xvc2UnKTtpZighY2xvc2Upe2Nsb3Nl PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtjbG9zZS5pZD0neWFuLXF0LWNs b3NlJztjbG9zZS5pbm5lckhUTUw9J0Nsb3NlIFRpcCc7Y2xvc2UuaHJlZj0nIyc7 UXRFbC5pbnNlcnRCZWZvcmUoY2xvc2UsbnVsbCk7WXVlLm9uKGNsb3NlLCdjbGlj aycsZnVuY3Rpb24oZSl7WXVlLnByZXZlbnREZWZhdWx0KGUpO2Nsb3NlVGlwKCk7 aWYodGlwc1tpblByb2dyZXNzRWwuaWRdKQp7dGlwc1tpblByb2dyZXNzRWwuaWRd LmNsb3NlZENhc2VzW3R5cGVUb0hpZGVdPXRydWU7aWYoaW5Qcm9ncmVzc0VsLmZv Y3VzKXtpblByb2dyZXNzRWwuZm9jdXMoKTt9fX0pO30KWXVkLnNldFkoUXRFbCxZ dWQuZ2V0WShlbCktMjYpO2RpbUNvbnRlbnQoKTt9fQpmdW5jdGlvbiBxdFNwZWxs Q2hlY2soZSxzcGVsbGluZ3Mpe1l1ZS5wcmV2ZW50RGVmYXVsdChlKTtZQUhPTy5T ZWFyY2guQW5zd2Vycy5zcGVsbENoZWNrZXIuY2xvc2UoKTtZQUhPTy5TZWFyY2gu QW5zd2Vycy5zcGVsbENoZWNrZXIuY2hlY2soaW5Qcm9ncmVzc0VsLHRydWUsc3Bl bGxpbmdzKTt9CmZ1bmN0aW9uIHJlbmRlclRpcChlbCx0eXBlLG9wdGlvbnMpe3Zh ciBiZHM9WXVkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2JkJywnZGl2JyxRdEVs KTtZdWQucmVtb3ZlQ2xhc3MoUXRFbCwncXQtZXJyb3InKTtZdWQucmVtb3ZlQ2xh c3MoaW5Qcm9ncmVzc0VsLCdoYXMtZXJyb3InKTtpblByb2dyZXNzRWw9ZWw7aWYo YmRzLmxlbmd0aCl7aWYoY2xhc3NUb1JlbW92ZSl7WXVkLnJlbW92ZUNsYXNzKFF0 RWwsY2xhc3NUb1JlbW92ZSk7Y2xhc3NUb1JlbW92ZT1mYWxzZTt9CnZhciB0aXA9 dGlwc1tpblByb2dyZXNzRWwuaWRdO2lmKCF0aXAubGFiZWxzKXt0aXAubGFiZWxz PSdkZWZhdWx0TGFiZWxzJzt9CnZhciBiZD1iZHNbMF07aWYodHlwZT09J3NwZWxs Jyl7WXVkLmFkZENsYXNzKFF0RWwsJ3F0LWVyYXNlcicpO2NsYXNzVG9SZW1vdmU9 J3F0LWVyYXNlcic7dHlwZVRvSGlkZT0nc3BlbGwnO3ZhciBzdHI9Zm9ybWF0QmQo WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnF1YWxpdHlUaXBzW3RpcC5sYWJl bHNdLmlzc3VlU3BlbGxpbmd8fFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5x dWFsaXR5VGlwcy5kZWZhdWx0TGFiZWxzLmlzc3VlU3BlbGxpbmcpO2JkLmlubmVy SFRNTD1zdHIucmVwbGFjZSgvJWNvdW50JS8sb3B0aW9ucy5sZW5ndGgpO2lmKFlB SE9PLlNlYXJjaC5BbnN3ZXJzLnNwZWxsQ2hlY2tlci5nZXRUYXJnZXQoKSE9PWlu UHJvZ3Jlc3NFbCl7YmQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3AnKVsxXS5pbm5l ckhUTUw9JzxhIGhyZWY9IiMiIGlkPSJ5YW4tc3BlbGwtbGF1bmNoIj4nK2JkLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCdwJylbMV0uaW5uZXJIVE1MKyc8L2E+JztZdWUu b24oJ3lhbi1zcGVsbC1sYXVuY2gnLCdjbGljaycscXRTcGVsbENoZWNrLG9wdGlv bnMpO30KZWxzZXtiZC5yZW1vdmVDaGlsZChiZC5nZXRFbGVtZW50c0J5VGFnTmFt ZSgncCcpWzFdKTt9CnBvc2l0aW9uUXQoaW5Qcm9ncmVzc0VsKTt9CmVsc2UgaWYo dHlwZT09J3NwZWxsX29wZW4nKXtZdWQuYWRkQ2xhc3MoUXRFbCwncXQtZXJhc2Vy Jyk7Y2xhc3NUb1JlbW92ZT0ncXQtZXJhc2VyJztiZC5pbm5lckhUTUw9Zm9ybWF0 QmQoWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnF1YWxpdHlUaXBzW3RpcC5s YWJlbHNdLmlzc3VlU3BlbGxpbmdPcGVufHxZQUhPTy5TZWFyY2guQW5zd2Vycy5s YWJlbHMucXVhbGl0eVRpcHMuZGVmYXVsdExhYmVscy5pc3N1ZVNwZWxsaW5nT3Bl bik7cG9zaXRpb25RdChpblByb2dyZXNzRWwpO30KZWxzZSBpZih0eXBlPT0nc3Bl bGxfY29tcGxldGUnKXtZdWQuYWRkQ2xhc3MoUXRFbCwncXQtcGVuY2lsdGlwLXRp Y2snKTtjbGFzc1RvUmVtb3ZlPSdxdC1wZW5jaWx0aXAtdGljayc7YmQuaW5uZXJI VE1MPWZvcm1hdEJkKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5xdWFsaXR5 VGlwc1t0aXAubGFiZWxzXS5pc3N1ZVNwZWxsaW5nQ29tcGxldGV8fFlBSE9PLlNl YXJjaC5BbnN3ZXJzLmxhYmVscy5xdWFsaXR5VGlwcy5kZWZhdWx0TGFiZWxzLmlz c3VlU3BlbGxpbmdDb21wbGV0ZSk7cG9zaXRpb25RdChpblByb2dyZXNzRWwpO3Nl dFRpbWVvdXQoZnVuY3Rpb24oKXtnZXRUaXBzKGluUHJvZ3Jlc3NFbCk7fSwxNTAw KTt9CmVsc2UgaWYodHlwZT09J2NhcHMnKXtZdWQuYWRkQ2xhc3MoUXRFbCwncXQt YnViYmxlJyk7Y2xhc3NUb1JlbW92ZT0ncXQtYnViYmxlJzt0eXBlVG9IaWRlPSdj YXBzJztiZC5pbm5lckhUTUw9Zm9ybWF0QmQoWUFIT08uU2VhcmNoLkFuc3dlcnMu bGFiZWxzLnF1YWxpdHlUaXBzW3RpcC5sYWJlbHNdLmlzc3VlQ2Fwc3x8WUFIT08u U2VhcmNoLkFuc3dlcnMubGFiZWxzLnF1YWxpdHlUaXBzLmRlZmF1bHRMYWJlbHMu aXNzdWVDYXBzKTtwb3NpdGlvblF0KGluUHJvZ3Jlc3NFbCk7fQplbHNlIGlmKHR5 cGU9PSdzaG9ydCcpe1l1ZC5hZGRDbGFzcyhRdEVsLCdxdC1wZW5jaWx0aXAnKTtj bGFzc1RvUmVtb3ZlPSdxdC1wZW5jaWx0aXAnO3R5cGVUb0hpZGU9J3Nob3J0Jzti ZC5pbm5lckhUTUw9Zm9ybWF0QmQoWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxz LnF1YWxpdHlUaXBzW3RpcC5sYWJlbHNdLmlzc3VlU2hvcnR8fFlBSE9PLlNlYXJj aC5BbnN3ZXJzLmxhYmVscy5xdWFsaXR5VGlwcy5kZWZhdWx0TGFiZWxzLmlzc3Vl U2hvcnQpO3Bvc2l0aW9uUXQoaW5Qcm9ncmVzc0VsKTt9CmVsc2UgaWYodHlwZT09 J3Rvb19sb25nJyl7WXVkLmFkZENsYXNzKFF0RWwsJ3F0LWVyYXNlcicpO2NsYXNz VG9SZW1vdmU9J3F0LWVyYXNlcic7dHlwZVRvSGlkZT0ndG9vX2xvbmcnO2JkLmlu bmVySFRNTD1mb3JtYXRCZChZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMucXVh bGl0eVRpcHNbdGlwLmxhYmVsc10uaXNzdWVMb25nKTtwb3NpdGlvblF0KGluUHJv Z3Jlc3NFbCk7fQplbHNlIGlmKHR5cGU9PSdub25fYWxwaGEnKXtZdWQuYWRkQ2xh c3MoUXRFbCwncXQtYnViYmxlJyk7Y2xhc3NUb1JlbW92ZT0ncXQtYnViYmxlJzt0 eXBlVG9IaWRlPSdub25fYWxwaGEnO2JkLmlubmVySFRNTD1mb3JtYXRCZChZQUhP Ty5TZWFyY2guQW5zd2Vycy5sYWJlbHMucXVhbGl0eVRpcHNbdGlwLmxhYmVsc10u aXNzdWVQdW5jdHVhdGlvbnx8WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnF1 YWxpdHlUaXBzLmRlZmF1bHRMYWJlbHMuaXNzdWVQdW5jdHVhdGlvbik7cG9zaXRp b25RdChpblByb2dyZXNzRWwpO30KZWxzZSBpZih0eXBlPT0nc2ltaWxhcicpe1l1 ZC5hZGRDbGFzcyhRdEVsLCdxdC1tYWduaWZ5Jyk7Y2xhc3NUb1JlbW92ZT0ncXQt bWFnbmlmeSc7dHlwZVRvSGlkZT0nc2ltaWxhcic7YmQuaW5uZXJIVE1MPWZvcm1h dEJkKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5xdWFsaXR5VGlwc1t0aXAu bGFiZWxzXS5pc3N1ZVNpbWlsYXJ8fFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVs cy5xdWFsaXR5VGlwcy5kZWZhdWx0TGFiZWxzLmlzc3VlU2ltaWxhcik7cG9zaXRp b25RdChpblByb2dyZXNzRWwpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnNpbWlsYXJR dWVzdGlvbnMuc2hvdyhvcHRpb25zKTt9CmVsc2UgaWYodHlwZT09J2RlZmF1bHQn KXt0eXBlVG9IaWRlPSdkZWZhdWx0JztiZC5pbm5lckhUTUw9Zm9ybWF0QmQoWUFI T08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnF1YWxpdHlUaXBzW3RpcC5sYWJlbHNd LmRlZmF1bHRfdGlwKTtwb3NpdGlvblF0KGluUHJvZ3Jlc3NFbCk7fQpZQUhPTy5T ZWFyY2guQW5zd2Vycy5xdWFsaXR5VGlwU2hvd24uZmlyZSh0eXBlKTt9fQpmdW5j dGlvbiBjYWxsYmFja1N1Y2Nlc3Mobyl7aWYoby5yZXNwb25zZVRleHQmJllBSE9P LlNlYXJjaC5BbnN3ZXJzLnNwZWxsQ2hlY2tlci5nZXRUYXJnZXQoKSE9PW8uYXJn dW1lbnQpe3ZhciBlbD1vLmFyZ3VtZW50O3ZhciByZXNwb25zZT1ldmFsKCcoJytv LnJlc3BvbnNlVGV4dCsnKScpO2lmKFF0RWwpe3ZhciBiZHM9WXVkLmdldEVsZW1l bnRzQnlDbGFzc05hbWUoJ2JkJywnZGl2JyxRdEVsKTtpZihiZHMubGVuZ3RoPjAp e3ZhciB0aXA9dGlwc1tvLmFyZ3VtZW50LmlkXTtpZihyZXNwb25zZSl7aW5Qcm9n cmVzc0VsPW8uYXJndW1lbnQ7aWYodGlwLm9wdGlvbnMuc3BlbGwmJnJlc3BvbnNl LlNQRUxMJiZyZXNwb25zZS5TUEVMTCE9PWZhbHNlJiYhdGlwLmNsb3NlZENhc2Vz WydzcGVsbCddKXtyZW5kZXJUaXAoZWwsJ3NwZWxsJyxyZXNwb25zZS5TUEVMTCk7 fWVsc2UgaWYodGlwLm9wdGlvbnMuY2FwcyYmcmVzcG9uc2UuQ0FQUyYmcmVzcG9u c2UuQ0FQUyE9PWZhbHNlJiYhdGlwLmNsb3NlZENhc2VzWydjYXBzJ10pe3JlbmRl clRpcChlbCwnY2FwcycpO31lbHNlIGlmKHRpcC5vcHRpb25zLnRvb19zaG9ydCYm cmVzcG9uc2UuU0hPUlQmJnJlc3BvbnNlLlNIT1JUIT09ZmFsc2UmJiF0aXAuY2xv c2VkQ2FzZXNbJ3Nob3J0J10pe3JlbmRlclRpcChlbCwnc2hvcnQnKTt9ZWxzZSBp Zih0aXAub3B0aW9ucy50b29fbG9uZyYmcmVzcG9uc2UuVE9PX0xPTkcmJnJlc3Bv bnNlLlRPT19MT05HIT09ZmFsc2UmJiF0aXAuY2xvc2VkQ2FzZXNbJ3Rvb19sb25n J10pe3JlbmRlclRpcChlbCwndG9vX2xvbmcnKTt9ZWxzZSBpZih0aXAub3B0aW9u cy5ub25fYWxwaGEmJnJlc3BvbnNlLk5PTl9BTFBIQSYmcmVzcG9uc2UuTk9OX0FM UEhBIT09ZmFsc2UmJiF0aXAuY2xvc2VkQ2FzZXNbJ25vbl9hbHBoYSddKXtyZW5k ZXJUaXAoZWwsJ25vbl9hbHBoYScpO31lbHNlIGlmKHRpcC5vcHRpb25zLnNpbWls YXImJnJlc3BvbnNlLlNJTUlMQVImJnJlc3BvbnNlLlNJTUlMQVIhPT1mYWxzZSYm IXRpcC5jbG9zZWRDYXNlc1snc2ltaWxhciddKXtyZW5kZXJUaXAoZWwsJ3NpbWls YXInLHJlc3BvbnNlLlNJTUlMQVIpO31lbHNle2Nsb3NlVGlwKCk7fX0KZWxzZQp7 cG9zaXRpb25RdChpblByb2dyZXNzRWwpO319fX19CmZ1bmN0aW9uIGZvcm1hdEJk KGNvbnRlbnQpe3ZhciBmaW5hbENvbnRlbnQ9Jyc7aWYoY29udGVudC5sZW5ndGg+ MCl7Zm9yKHZhciBpPTAsbD1jb250ZW50Lmxlbmd0aDtpPGw7aSsrKXt2YXIgc3Ry PWNvbnRlbnRbaV07dmFyIGxhc3RDbGFzcz0nJztpZihpPT1sLTEpe2xhc3RDbGFz cz0nIGNsYXNzPSJsYXN0Iic7fQpzdHI9c3RyLnJlcGxhY2UoLyVvcGVuQm9sZCUv ZywnPHN0cm9uZz4nKTtzdHI9c3RyLnJlcGxhY2UoLyVjbG9zZUJvbGQlL2csJzwv c3Ryb25nPicpO3N0cj1zdHIucmVwbGFjZSgvJU9QRU5fTElOS19HUk9VUF9HVUlE RUxJTkVTJS9nLCc8YSBocmVmPSInK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVs cy5xdWFsaXR5VGlwcy5ncm91cERlZmF1bHQuZ3VpZGVsaW5lc19saW5rKyciPicp O3N0cj1zdHIucmVwbGFjZSgvJUNMT1NFX0xJTkslL2csJzwvYT4nKTtmaW5hbENv bnRlbnQrPSc8cCcrbGFzdENsYXNzKyc+JytzdHIrJzwvcD4nO319CnJldHVybiBm aW5hbENvbnRlbnQ7fQpmdW5jdGlvbiBjYWxsYmFja0ZhaWwoKXtZdWQuYWRkQ2xh c3MoUXRFbCwnY2xvc2VkJyk7fQpmdW5jdGlvbiBjbG9zZVNwZWxsQ2hlY2soKXt2 YXIgZWw9WUFIT08uU2VhcmNoLkFuc3dlcnMuc3BlbGxDaGVja2VyLmdldFRhcmdl dCgpO2lmKGVsKXtlbC5mb2N1cygpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnNwZWxs Q2hlY2tlci5jbG9zZSgpO3JlbmRlclRpcChlbCwnc3BlbGxfY29tcGxldGUnKTt9 fQpmdW5jdGlvbiBzdGFydFNwZWxsQ2hlY2soKXtnZXRUaXBzKGluUHJvZ3Jlc3NF bCk7fQpyZXR1cm57YWRkQ2hlY2s6ZnVuY3Rpb24oZWwsb3B0aW9ucyxkZWZhdWx0 RW5hYmxlZCxsYWJlbHMpe1F0RWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lh bi1xdCcpO3RpcHNbZWwuaWRdPXt9O3RpcHNbZWwuaWRdLmNsb3NlZENhc2VzPXt9 O3RpcHNbZWwuaWRdLm9wdGlvbnM9b3B0aW9uczt0aXBzW2VsLmlkXS5sYWJlbHM9 bGFiZWxzO2lmKGRlZmF1bHRFbmFibGVkKQp7dmFyIGVycm9yUGFycmE9UXRFbC5n ZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpO3ZhciB0YXJnZXRDbGFzcz1uZXcgUmVn RXhwKCIoXnxcXHMpcXQtZm9jdXMtW2EtekEtWjAtOS1fXSsoXFxzfCQpIik7dmFy IHRhcmdldElEPWZhbHNlO2Zvcih2YXIgaT0wO2k8ZXJyb3JQYXJyYS5sZW5ndGg7 aSsrKXtpZihlcnJvclBhcnJhWzBdLmNsYXNzTmFtZSE9PScnKQp7dmFyIG1hdGNo ZXM9dGFyZ2V0Q2xhc3MuZXhlYyhlcnJvclBhcnJhWzBdLmNsYXNzTmFtZSk7aWYo bWF0Y2hlcyl7dGFyZ2V0SUQ9bWF0Y2hlc1swXS5yZXBsYWNlKC9ccy9naSwnJyku cmVwbGFjZSgncXQtZm9jdXMtJywnJyk7fX19CmlmKCF0YXJnZXRJRCkKe2luUHJv Z3Jlc3NFbD1lbDtpZighWUFIT08udXRpbC5Eb20uaGFzQ2xhc3MoUXRFbCwncXQt ZXJyb3InKSYmKGVsLnZhbHVlIT09ZWwuZGVmYXVsdFZhbHVlKSl7Z2V0VGlwcyhl bCk7fQpwb3NpdGlvblF0KGVsKTt9ZWxzZXtpblByb2dyZXNzRWw9ZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SUQpO3Bvc2l0aW9uUXQoaW5Qcm9ncmVzc0Vs KTt9fQppZihZQUhPTy51dGlsLkRvbS5oYXNDbGFzcyhkb2N1bWVudC5ib2R5LCd0 aXBzLWRpc2FibGVkJykpe3JldHVybiBmYWxzZTt9CllBSE9PLlNlYXJjaC5BbnN3 ZXJzLnNwZWxsQ2hlY2tDb21wbGV0ZS5zdWJzY3JpYmUoY2xvc2VTcGVsbENoZWNr KTtZQUhPTy5TZWFyY2guQW5zd2Vycy5zcGVsbENoZWNrU3RhcnRlZC5zdWJzY3Jp YmUoc3RhcnRTcGVsbENoZWNrKTtpZihlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp PT0ndGV4dGFyZWEnfHxlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT0nc2VsZWN0 J3x8KGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSdpbnB1dCcmJmVsLnR5cGUu dG9Mb3dlckNhc2UoKT09J3RleHQnKSl7WXVlLm9uKGVsLCdmb2N1cycsZnVuY3Rp b24oZSl7Y2xlYXJUaW1lb3V0KGhpZGVUaW1lcik7Z2V0VGlwcyh0aGlzKTt9KTtZ dWUub24oZWwsJ2tleXVwJyxwb2xsKTtZdWUub24oZWwsJ2NoYW5nZScscG9sbCk7 fX0sZ2V0VGFyZ2V0OmZ1bmN0aW9uKCkKe3JldHVybiBpblByb2dyZXNzRWw7fSxy ZWZyZXNoUVRQb3M6ZnVuY3Rpb24oKQp7aWYoaW5Qcm9ncmVzc0VsKXtwb3NpdGlv blF0KGluUHJvZ3Jlc3NFbCk7fX19O30oKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5t dWx0aVNlbGVjdD1mdW5jdGlvbigpe3ZhciBZdWQ9WUFIT08udXRpbC5Eb20sWXVl PVlBSE9PLnV0aWwuRXZlbnQsbXVsdGlDb250YWluZXIsY2F0ZWdvcnlsaXN0aW5n LHlvdUhhdmVTZWxlY3RlZEVsPWZhbHNlLHNlbGVjdGVkSW5wdXQ9ZmFsc2U7ZnVu Y3Rpb24gdXBkYXRlU2VsZWN0ZWQoaXRlbSl7dmFyIHN0cjtpZihpdGVtLnN1Yl9j YXRlZ29yaWVzKXtzdHI9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLm11bHRp U2VsZWN0LnNlY29uZExhYmVsO30KZWxzZXtzdHI9WUFIT08uU2VhcmNoLkFuc3dl cnMubGFiZWxzLm11bHRpU2VsZWN0LnNlbGVjdGVkQ2F0ZWdvcnk7c2VsZWN0ZWRJ bnB1dD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLW1hbnVhbHNlbGVjdGVk Jyk7aWYoIXNlbGVjdGVkSW5wdXQpe3NlbGVjdGVkSW5wdXQ9ZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnaW5wdXQnKTtzZWxlY3RlZElucHV0Lm5hbWU9J2NhdGVnb3J5 JztzZWxlY3RlZElucHV0LnR5cGU9J2hpZGRlbic7c2VsZWN0ZWRJbnB1dC5pZD0n eWFuLW1hbnVhbHNlbGVjdGVkJzttdWx0aUNvbnRhaW5lci5hcHBlbmRDaGlsZChz ZWxlY3RlZElucHV0KTt9CnNlbGVjdGVkSW5wdXQudmFsdWU9aXRlbS5jYXRlZ29y eTt9CnN0cj1zdHIucmVwbGFjZSgvJU9QRU5fRU1QSEFTSVMlL2csJzxzdHJvbmc+ Jyk7c3RyPXN0ci5yZXBsYWNlKC8lQ0xPU0VfRU1QSEFTSVMlL2csJzwvc3Ryb25n PicpO3N0cj1zdHIucmVwbGFjZSgvJUNBVEVHT1JZJS9nLGl0ZW0udGV4dCk7eW91 SGF2ZVNlbGVjdGVkRWwuaW5uZXJIVE1MPXN0cjt9CmZ1bmN0aW9uIGFkZENhdGVn b3J5KHNlbGVjdCxpdGVtKXt2YXIgbmFtZT1pdGVtLnRleHQsY2lkPWl0ZW0uY2F0 ZWdvcnk7aWYoaXRlbS5zdWJfY2F0ZWdvcmllcyl7bmFtZSs9JyA+Jzt9CnZhciBv cHRpb249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7b3B0aW9uLmFw cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5hbWUpKTtvcHRpb24u dmFsdWU9Y2lkO29wdGlvbi5pZD0nY2F0LScrY2lkO3NlbGVjdC5hcHBlbmRDaGls ZChvcHRpb24pO30KZnVuY3Rpb24gY3JlYXRlTXVsdGlTZWxlY3QoZWwpe3ZhciB0 b011bHRpPWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmaWVsZHNldCcpWzBdO3Zh ciBzZWxlY3QxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO3ZhciBz ZWxlY3QyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO3ZhciBzZWxl Y3QzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO211bHRpQ29udGFp bmVyPXRvTXVsdGkucGFyZW50Tm9kZTttdWx0aUNvbnRhaW5lci5yZW1vdmVDaGls ZCh0b011bHRpKTtjYXRlZ29yeUxpc3Rpbmc9Y3JlYXRlU2VsZWN0KHRvTXVsdGks e30pO3NlbGVjdDEubGVuZ3RoPTA7dmFyIGZyYWc9ZG9jdW1lbnQuY3JlYXRlRG9j dW1lbnRGcmFnbWVudCgpO2Zvcih2YXIgaXRlbSBpbiBjYXRlZ29yeUxpc3Rpbmcp e2FkZENhdGVnb3J5KGZyYWcsY2F0ZWdvcnlMaXN0aW5nW2l0ZW1dKTt9CnNlbGVj dDEuYXBwZW5kQ2hpbGQoZnJhZyk7c2VsZWN0MS5zaXplPXNlbGVjdDEub3B0aW9u cy5sZW5ndGg7c2VsZWN0Mi5zaXplPXNlbGVjdDEuc2l6ZTtzZWxlY3QzLnNpemU9 c2VsZWN0MS5zaXplO211bHRpQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGVjdDEp O211bHRpQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGVjdDIpO211bHRpQ29udGFp bmVyLmFwcGVuZENoaWxkKHNlbGVjdDMpO211bHRpQ29udGFpbmVyLmlubmVySFRN TD1tdWx0aUNvbnRhaW5lci5pbm5lckhUTUw7c2VsZWN0MT1tdWx0aUNvbnRhaW5l ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JylbMF07c2VsZWN0Mj1tdWx0 aUNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JylbMV07c2Vs ZWN0Mz1tdWx0aUNvbnRhaW5lci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0 JylbMl07aWYoc2VsZWN0MS5zZWxlY3RlZEluZGV4IT09LTEpCntzZWxlY3QxLnNl bGVjdGVkSW5kZXg9LTE7fQpZdWUub24oc2VsZWN0MSwnY2hhbmdlJyxmdW5jdGlv bigpe3ZhciBsaXN0aW5nPWNhdGVnb3J5TGlzdGluZ1tzZWxlY3QxLm9wdGlvbnNb c2VsZWN0MS5zZWxlY3RlZEluZGV4XS5pZF0uc3ViX2NhdGVnb3JpZXM7c2VsZWN0 Mi5sZW5ndGg9MDtzZWxlY3QzLmxlbmd0aD0wO2lmKGxpc3Rpbmcpe3ZhciBmcmFn PWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodmFyIGl0ZW0g aW4gbGlzdGluZyl7YWRkQ2F0ZWdvcnkoZnJhZyxsaXN0aW5nW2l0ZW1dKTt9CnNl bGVjdDIuYXBwZW5kQ2hpbGQoZnJhZyk7fQp1cGRhdGVTZWxlY3RlZChjYXRlZ29y eUxpc3Rpbmdbc2VsZWN0MS5vcHRpb25zW3NlbGVjdDEuc2VsZWN0ZWRJbmRleF0u aWRdKTt9KTtZdWUub24oc2VsZWN0MiwnY2hhbmdlJyxmdW5jdGlvbigpe3ZhciBs aXN0aW5nPWNhdGVnb3J5TGlzdGluZ1tzZWxlY3QxLm9wdGlvbnNbc2VsZWN0MS5z ZWxlY3RlZEluZGV4XS5pZF0uc3ViX2NhdGVnb3JpZXNbc2VsZWN0Mi5vcHRpb25z W3NlbGVjdDIuc2VsZWN0ZWRJbmRleF0uaWRdLnN1Yl9jYXRlZ29yaWVzO3NlbGVj dDMubGVuZ3RoPTA7aWYobGlzdGluZyl7dmFyIGZyYWc9ZG9jdW1lbnQuY3JlYXRl RG9jdW1lbnRGcmFnbWVudCgpO2Zvcih2YXIgaXRlbSBpbiBsaXN0aW5nKXthZGRD YXRlZ29yeShmcmFnLGxpc3RpbmdbaXRlbV0pO30Kc2VsZWN0My5hcHBlbmRDaGls ZChmcmFnKTt9CnVwZGF0ZVNlbGVjdGVkKGNhdGVnb3J5TGlzdGluZ1tzZWxlY3Qx Lm9wdGlvbnNbc2VsZWN0MS5zZWxlY3RlZEluZGV4XS5pZF0uc3ViX2NhdGVnb3Jp ZXNbc2VsZWN0Mi5vcHRpb25zW3NlbGVjdDIuc2VsZWN0ZWRJbmRleF0uaWRdKTt9 KTtZdWUub24oc2VsZWN0MywnY2hhbmdlJyxmdW5jdGlvbigpe3VwZGF0ZVNlbGVj dGVkKGNhdGVnb3J5TGlzdGluZ1tzZWxlY3QxLm9wdGlvbnNbc2VsZWN0MS5zZWxl Y3RlZEluZGV4XS5pZF0uc3ViX2NhdGVnb3JpZXNbc2VsZWN0Mi5vcHRpb25zW3Nl bGVjdDIuc2VsZWN0ZWRJbmRleF0uaWRdLnN1Yl9jYXRlZ29yaWVzW3NlbGVjdDMu b3B0aW9uc1tzZWxlY3QzLnNlbGVjdGVkSW5kZXhdLmlkXSk7fSk7fQpmdW5jdGlv biBjcmVhdGVTZWxlY3QoZWwsdlRyZWUpe3ZhciBjaGlsZHJlbj1lbC5jaGlsZE5v ZGVzO2lmKGNoaWxkcmVuLmxlbmd0aD4wKXtmb3IodmFyIGk9MCxqPWNoaWxkcmVu Lmxlbmd0aDtpPGo7aSsrKXt2YXIgbXlfZWw9Y2hpbGRyZW5baV07aWYobXlfZWwu bm9kZU5hbWUudG9Mb3dlckNhc2UoKT09J2ZpZWxkc2V0Jyl7dmFyIHByZXY9WXVk LmdldFByZXZpb3VzU2libGluZyhteV9lbCk7dmFyIGlkVG9Vc2U9cHJldi5nZXRB dHRyaWJ1dGUoJ2ZvcicpfHxwcmV2Lmh0bWxGb3I7dlRyZWVbaWRUb1VzZV1bJ3N1 Yl9jYXRlZ29yaWVzJ109Y3JlYXRlU2VsZWN0KG15X2VsLHt9KTt9CmVsc2UgaWYo bXlfZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09J2lucHV0JyYmbXlfZWwudHlw ZT09J3JhZGlvJyl7dmFyIGlkVG9HZXQ9bXlfZWwuaWQ7aWYodlRyZWVbaWRUb0dl dF0pe3ZUcmVlW2lkVG9HZXRdWydjYXRlZ29yeSddPW15X2VsLnZhbHVlO30KZWxz ZXt2VHJlZVtpZFRvR2V0XT17J2NhdGVnb3J5JzpteV9lbC52YWx1ZX07fX0KZWxz ZSBpZihteV9lbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT0nbGFiZWwnKXt2YXIg aWRUb0dldD1teV9lbC5nZXRBdHRyaWJ1dGUoJ2ZvcicpfHxteV9lbC5odG1sRm9y O2lmKHZUcmVlW2lkVG9HZXRdKXt2VHJlZVtpZFRvR2V0XVsndGV4dCddPW15X2Vs LmZpcnN0Q2hpbGQubm9kZVZhbHVlO30KZWxzZXt2VHJlZVtpZFRvR2V0XT17J3Rl eHQnOm15X2VsLmZpcnN0Q2hpbGQubm9kZVZhbHVlfTt9fX19CnJldHVybiB2VHJl ZTt9CmZ1bmN0aW9uIGNoYW5nZVRhYih0eXBlLGFyZ3Mpe3NlbGVjdGVkSW5wdXQ9 ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1tYW51YWxzZWxlY3RlZCcpO2lm KHNlbGVjdGVkSW5wdXQpe2lmKGFyZ3NbMF09PSd5YW4tYXNrLWF1dG9jYXQnKXtz ZWxlY3RlZElucHV0LmRpc2FibGVkPXRydWU7fQplbHNle3NlbGVjdGVkSW5wdXQu ZGlzYWJsZWQ9ZmFsc2U7fX19CnJldHVybntpbml0OmZ1bmN0aW9uKCl7dmFyIGVs cz1ZdWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbXVsdGktc2VsZWN0JywnZGl2 Jyk7aWYoZWxzLmxlbmd0aD4wKXtmb3IodmFyIGk9MCxqPWVscy5sZW5ndGg7aTxq O2krKyl7Y3JlYXRlTXVsdGlTZWxlY3QoZWxzW2ldKTt9CnlvdUhhdmVTZWxlY3Rl ZEVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTt5b3VIYXZlU2VsZWN0ZWRF bC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShZQUhPTy5TZWFy Y2guQW5zd2Vycy5sYWJlbHMubXVsdGlTZWxlY3QudG9wTGFiZWwpKTttdWx0aUNv bnRhaW5lci5hcHBlbmRDaGlsZCh5b3VIYXZlU2VsZWN0ZWRFbCk7WUFIT08uU2Vh cmNoLkFuc3dlcnMudGFiQ2hhbmdlLnN1YnNjcmliZShjaGFuZ2VUYWIpO319fTt9 KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMucXVlc3Rpb25GaWx0ZXI9ZnVuY3Rpb24o KXtyZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBmaWx0ZXI9ZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3lhbi1xdWVzdGlvbi1maWx0ZXInKTtpZihmaWx0ZXIpe1lB SE9PLnV0aWwuRXZlbnQub24oZmlsdGVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdz ZWxlY3QnKVswXSwnY2hhbmdlJyxmdW5jdGlvbigpe2ZpbHRlci5nZXRFbGVtZW50 c0J5VGFnTmFtZSgnZm9ybScpWzBdLnN1Ym1pdCgpO30pO319fTt9KCk7WUFIT08u U2VhcmNoLkFuc3dlcnMuc3BlbGxpbmc9ZnVuY3Rpb24oKXtyZXR1cm57Y3JlYXRl UmFuZ2U6ZnVuY3Rpb24oZWwsc3RhcnQsbGVuZ3RoKXtpZihlbCl7aWYodHlwZW9m KGVsLnNlbGVjdGlvblN0YXJ0KT09J251bWJlcicpe3NldFRpbWVvdXQoZnVuY3Rp b24oKXtlbC5mb2N1cygpO2VsLnNlbGVjdCgpO2VsLnNlbGVjdGlvblN0YXJ0PXN0 YXJ0O2VsLnNlbGVjdGlvbkVuZD1zdGFydCtsZW5ndGg7fSwxKTt9ZWxzZSBpZihk b2N1bWVudC5zZWxlY3Rpb24mJmRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5n ZSl7c2V0VGltZW91dChmdW5jdGlvbigpe2VsLmZvY3VzKCk7ZWwuc2VsZWN0KCk7 dmFyIHJhbmdlPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO3Jhbmdl LmNvbGxhcHNlKCk7cmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLHN0YXJ0KTty YW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLGxlbmd0aCk7cmFuZ2Uuc2VsZWN0KCk7 fSwxKTt9fX0sY29ycmVjdFdvcmQ6ZnVuY3Rpb24oZWwsbmV3V29yZCl7aWYoZWwp e3ZhciBuZXdUZXh0PScnO3ZhciBvbGRUZXh0PWVsLnZhbHVlO3ZhciBvZmZzZXQ9 MDt2YXIgd29yZExlbmd0aD0wO2lmKHR5cGVvZihlbC5zZWxlY3Rpb25TdGFydCk9 PSdudW1iZXInKXtvZmZzZXQ9ZWwuc2VsZWN0aW9uU3RhcnQ7d29yZExlbmd0aD1l bC5zZWxlY3Rpb25FbmQtZWwuc2VsZWN0aW9uU3RhcnQ7fWVsc2UgaWYoZG9jdW1l bnQuc2VsZWN0aW9uJiZkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Upe3Zh ciBzZWw9ZWwuZ2V0U2VsZWN0aW9uKCk7dmFyIHJhbmdlPXNlbC5nZXRSYW5nZUF0 KDApO29mZnNldD1yYW5nZS5zdGFydE9mZnNldDt3b3JkTGVuZ3RoPXJhbmdlLmVu ZE9mZnNldC1yYW5nZS5zdGFydE9mZnNldDt9Cm5ld1RleHQrPW9sZFRleHQuc3Vi c3RyKDAscGFyc2VJbnQob2Zmc2V0LDEwKSk7bmV3VGV4dCs9bmV3V29yZDtuZXdU ZXh0Kz1vbGRUZXh0LnN1YnN0cihwYXJzZUludChvZmZzZXQsMTApK3BhcnNlSW50 KHdvcmRMZW5ndGgsMTApLHBhcnNlSW50KG9sZFRleHQubGVuZ3RoLDEwKS0ocGFy c2VJbnQob2Zmc2V0LDEwKStwYXJzZUludCh3b3JkTGVuZ3RoLDEwKSkpO2VsLnZh bHVlPW5ld1RleHQ7d29yZENoYW5nZWQuZmlyZSgpO319fTt9KCk7WUFIT08uU2Vh cmNoLkFuc3dlcnMucHJvZmlsZVJlZ2lzdHJhdGlvbj1mdW5jdGlvbigpe3ZhciB0 b2dnbGU9ZnVuY3Rpb24oZSl7dmFyIGVtYWlsTGlzdD1kb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgneWFuLWVtYWlsLW9wdGlvbi1saXN0Jyk7WXVkLnNldFN0eWxlKGVt YWlsTGlzdCwnZGlzcGxheScsJ2Jsb2NrJyk7WXVkLnNldFN0eWxlKGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdjaGFuZ2UtZW1haWwtbGluaycpLCdkaXNwbGF5Jywn bm9uZScpO1l1ZC5zZXRTdHlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3Vy cmVudC1lbWFpbCcpLCdkaXNwbGF5Jywnbm9uZScpO307cmV0dXJue2luaXQ6ZnVu Y3Rpb24oKXt2YXIgZW1haWxMaXN0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5 YW4tZW1haWwtb3B0aW9uLWxpc3QnKTtpZihlbWFpbExpc3Qpe3ZhciBzcGFuPWRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtzcGFuLnNldEF0dHJpYnV0ZSgn aWQnLCdjdXJyZW50LWVtYWlsJyk7dmFyIGxhYmVsRW1haWw9ZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ2xhYmVsRW1haWwwJyk7aWYobGFiZWxFbWFpbCl7c3Bhbi5p bm5lckhUTUw9bGFiZWxFbWFpbC5pbm5lckhUTUw7ZW1haWxMaXN0LnBhcmVudE5v ZGUuaW5zZXJ0QmVmb3JlKHNwYW4sZW1haWxMaXN0KTt2YXIgYW5jaG9yPWRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtZdWQuYWRkQ2xhc3MoYW5jaG9yLFlBSE9P LlNlYXJjaC5BbnN3ZXJzLmNzcy5wcm9maWxlUmVnaXN0cmF0aW9uLmNoYW5nZVJl Zyk7YW5jaG9yLnNldEF0dHJpYnV0ZSgnaWQnLCdjaGFuZ2UtZW1haWwtbGluaycp O2FuY2hvci5pbm5lckhUTUw9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnBy b2ZpbGVSZWdpc3RyYXRpb24ubGFiZWxDaGFuZ2U7ZW1haWxMaXN0LnBhcmVudE5v ZGUuaW5zZXJ0QmVmb3JlKGFuY2hvcixlbWFpbExpc3QpO1l1ZS5vbihhbmNob3Is J2NsaWNrJyx0b2dnbGUpO1l1ZC5zZXRTdHlsZShlbWFpbExpc3QsJ2Rpc3BsYXkn LCdub25lJyk7fX19fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuYmVzdEFuc3dl cj1mdW5jdGlvbigpe3ZhciBZdWQ9WUFIT08udXRpbC5Eb207dmFyIFl1ZT1ZQUhP Ty51dGlsLkV2ZW50O3ZhciBZYW49WUFIT08uU2VhcmNoLkFuc3dlcnM7dmFyIFF0 RWw7cmV0dXJue2luaXQ6ZnVuY3Rpb24oKXt2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxl bWVudEJ5SWQoJ3lhbi1iZXN0YW5zd2VyLWZlZWRiYWNrJyk7aWYoZWwpe1lhbi5s aW1pdENoYXJhY3RlcnMoZWwsMzAwLGZhbHNlLFlhbi5sYWJlbHMubGltaXRDaGFy YWN0ZXJzLnN0YXR1c0NvdW50LCJibG9jayIsWWFuLmNzcy5iZXN0QW5zd2VyLmNv dW50Q2xhc3MpO1lhbi5xdWFsaXR5VGlwcy5hZGRDaGVjayhlbCx7J3NwZWxsJzp0 cnVlLCdjYXBzJzp0cnVlLCdub25fYWxwaGEnOnRydWV9LHRydWUpO319fTt9KCk7 WUFIT08uU2VhcmNoLkFuc3dlcnMuY2Fyb3VzZWw9ZnVuY3Rpb24oKXtyZXR1cm57 aW5pdDpmdW5jdGlvbigpe3ZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn eWFuLWJlc3RvZicpO2lmKGVsKXt2YXIgcGFubmVscz1ZQUhPTy51dGlsLkRvbS5n ZXRFbGVtZW50c0J5KGZ1bmN0aW9uKG8pe2lmKG8ucGFyZW50Tm9kZS5wYXJlbnRO b2RlLnBhcmVudE5vZGU9PWVsKXtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9 LCJsaSIsZWwpO2lmKHBhbm5lbHMubGVuZ3RoPjIpe3ZhciBvQ2Fyb3VzZWxDb25m aWc9e3Zpc2libGVQYW5lczoxLGFuaW1EdXJhdGlvbjowLjUsbG9vcDoxfTtZQUhP Ty5FVS5vVGlja2VyPW5ldyBZQUhPTy5FVS53aWRnZXQuQ2Fyb3VzZWwoKS5pbml0 KGVsLG9DYXJvdXNlbENvbmZpZykucGFnaW5hdGUoKS5hbnN3ZXJzU2Nyb2xsKCku YXV0b1BsYXkoe2J1dHRvbkxhYmVsOiJwbGF5IixhdXRvUGxheURlbGF5OjE1MDAw fSk7fX19fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuY2xpY2tCb3g9ZnVuY3Rp b24oKXtyZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBib3hlcz1ZQUhPTy51dGls LkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbGlja2JveCcpO2lmKGJveGVz Lmxlbmd0aD4wKXtmb3IodmFyIGk9MCxib3g7Ym94PWJveGVzW2ldO2krKyl7WUFI T08udXRpbC5FdmVudC5vbihib3gsJ2NsaWNrJyxmdW5jdGlvbihlKXt2YXIgbGlu a3M9dGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpO2lmKGxpbmtzLmxlbmd0 aD4wKXtkb2N1bWVudC5sb2NhdGlvbi5ocmVmPWxpbmtzWzBdLmhyZWY7fX0pO1lB SE9PLnV0aWwuRXZlbnQub24oYm94LCdtb3VzZWVudGVyJyxmdW5jdGlvbihlKXtZ QUhPTy51dGlsLkRvbS5hZGRDbGFzcyh0aGlzLHRoaXMuY2xhc3NOYW1lLnNwbGl0 KCcgJylbMV0rJy1ob3ZlcicpO1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHRoaXMs J2hvdmVyJyk7fSk7WUFIT08udXRpbC5FdmVudC5vbihib3gsJ21vdXNlbGVhdmUn LGZ1bmN0aW9uKGUpe1lBSE9PLnV0aWwuRG9tLnJlbW92ZUNsYXNzKHRoaXMsdGhp cy5jbGFzc05hbWUuc3BsaXQoJyAnKVsxXSsnLWhvdmVyJyk7WUFIT08udXRpbC5E b20ucmVtb3ZlQ2xhc3ModGhpcywnaG92ZXInKTt9KTt9fX19O30oKTtZQUhPTy5T ZWFyY2guQW5zd2Vycy5zaW1pbGFyUXVlc3Rpb25zPWZ1bmN0aW9uKCl7dmFyIGNh bGxiYWNrPXtzdWNjZXNzOmNhbGxiYWNrU3VjY2VzcyxmYWlsdXJlOmNhbGxiYWNr RmFpbCx0aW1lb3V0OjcwMDB9LGluUHJvZ3Jlc3M9ZmFsc2UsY29udGFpbmVyPWZh bHNlLHNpbWlsYXJVcmw9Jy9xdWVzdGlvbi9zaW1pbGFyUXVlc3Rpb25zP3RleHQ9 JztmdW5jdGlvbiBhZGRRdWVzdGlvbihxdWVzdGlvbil7dmFyIGxpPWRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7dmFyIGF2YXRhcj1kb2N1bWVudC5jcmVhdGVF bGVtZW50KCdpbWcnKTthdmF0YXIuc3JjPXF1ZXN0aW9uLmF2YXRhcjthdmF0YXIu YWx0PScnO2F2YXRhci53aWR0aD0nMjQnO2F2YXRhci5oZWlnaHQ9JzI0JztsaS5h cHBlbmRDaGlsZChhdmF0YXIpO3ZhciB0aXRsZT1kb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdoMycpO3ZhciBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTts aW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHF1ZXN0aW9u LnRpdGxlKSk7bGluay5ocmVmPXF1ZXN0aW9uLnVybDt0aXRsZS5hcHBlbmRDaGls ZChsaW5rKTtsaS5hcHBlbmRDaGlsZCh0aXRsZSk7dmFyIHRleHQ9ZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgncCcpO3RleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl YXRlVGV4dE5vZGUocXVlc3Rpb24udGV4dCkpO2xpLmFwcGVuZENoaWxkKHRleHQp O3ZhciB1bD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO3VsLmNsYXNzTmFt ZT0nbWV0YSc7dmFyIGNhdE5hbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGkn KTtjYXROYW1lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHF1 ZXN0aW9uLmNhdGVnb3J5KycgLSAnKSk7dmFyIGFuc3dlckNvdW50PWRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7dmFyIHN0cjtpZihwYXJzZUludChxdWVzdGlv bi5hbnN3ZXJDb3VudCwxMCk+MSl7c3RyPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxh YmVscy5zaW1pbGFyUXVlc3Rpb25zLmFuc3dlckNvdW50UGx1cmFsLnJlcGxhY2Uo LyVDT1VOVCUvLHF1ZXN0aW9uLmFuc3dlckNvdW50KTt9CmVsc2V7c3RyPVlBSE9P LlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5zaW1pbGFyUXVlc3Rpb25zLmFuc3dlckNv dW50O30KYW5zd2VyQ291bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4 dE5vZGUoc3RyKSk7dWwuYXBwZW5kQ2hpbGQoY2F0TmFtZSk7dWwuYXBwZW5kQ2hp bGQoYW5zd2VyQ291bnQpO2xpLmFwcGVuZENoaWxkKHVsKTtyZXR1cm4gbGk7fQpm dW5jdGlvbiBjbGVhclF1ZXN0aW9ucyh0eXBlLGFyZ3Mpe2lmKGNvbnRhaW5lciYm YXJncyE9J3NpbWlsYXInKXtjb250YWluZXIuaW5uZXJIVE1MPScnO319CmZ1bmN0 aW9uIGRpc3BsYXlRdWVzdGlvbnMocmVzcG9uc2Upe2lmKCFjb250YWluZXIpe2Nv bnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb250YWluZXIu aWQ9J3lhbi1zaW1pbGFyLXF1ZXN0aW9ucyc7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ3lhbi1jb250ZW50JykuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtZQUhPTy5T ZWFyY2guQW5zd2Vycy5xdWFsaXR5VGlwSGlkZGVuLnN1YnNjcmliZShjbGVhclF1 ZXN0aW9ucyk7WUFIT08uU2VhcmNoLkFuc3dlcnMucXVhbGl0eVRpcFNob3duLnN1 YnNjcmliZShjbGVhclF1ZXN0aW9ucyk7fQpjbGVhclF1ZXN0aW9ucygpO3ZhciBo ZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMicpO2hkLmFwcGVuZENoaWxkKGRv Y3VtZW50LmNyZWF0ZVRleHROb2RlKFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVs cy5zaW1pbGFyUXVlc3Rpb25zLnRpdGxlKSk7Y29udGFpbmVyLmFwcGVuZENoaWxk KGhkKTt2YXIgdWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTt1bC5jbGFz c05hbWU9J3F1ZXN0aW9ucyc7Zm9yKHZhciBpPTAsbGVuPXJlc3BvbnNlLmxlbmd0 aDtpPGxlbjtpKyspe3VsLmFwcGVuZENoaWxkKGFkZFF1ZXN0aW9uKHJlc3BvbnNl W2ldKSk7fQpjb250YWluZXIuYXBwZW5kQ2hpbGQodWwpO30KZnVuY3Rpb24gY2Fs bGJhY2tTdWNjZXNzKG8pe2lmKG8ucmVzcG9uc2VUZXh0KXt2YXIgcmVzcG9uc2U9 ZXZhbCgnKCcrby5yZXNwb25zZVRleHQrJyknKTtkaXNwbGF5UXVlc3Rpb25zKHJl c3BvbnNlKTt9fQpmdW5jdGlvbiBjYWxsYmFja0ZhaWwoKXt9CmZ1bmN0aW9uIGdl dFF1ZXN0aW9ucygpe2lmKCFZQUhPTy51dGlsLkNvbm5lY3QuaXNDYWxsSW5Qcm9n cmVzcyhpblByb2dyZXNzKSl7aW5Qcm9ncmVzcz1ZQUhPTy51dGlsLkNvbm5lY3Qu YXN5bmNSZXF1ZXN0KCdHRVQnLHNpbWlsYXJVcmwrZW5jb2RlVVJJQ29tcG9uZW50 KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tYXNrLXRpdGxlJykudmFsdWUp KycgJytlbmNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo J3lhbi1hc2stZGV0YWlscycpLnZhbHVlKSsnJmN1cnRpbWU9JysobmV3IERhdGUo KS5nZXRUaW1lKCkudG9TdHJpbmcoKSksY2FsbGJhY2spO319CnJldHVybntzaG93 OmZ1bmN0aW9uKHF1ZXN0aW9ucyl7aWYoIXF1ZXN0aW9ucyl7Z2V0UXVlc3Rpb25z KCk7fQplbHNle2Rpc3BsYXlRdWVzdGlvbnMocXVlc3Rpb25zKTt9fX07fSgpO1lB SE9PLlNlYXJjaC5BbnN3ZXJzLmFydGljbGVSYXRpbmdzPWZ1bmN0aW9uKCl7dmFy IGNoYXJ0RWw7ZnVuY3Rpb24gaW5pdENoYXJ0KCl7dmFyIG15Q2hhcnQsb3Bpbmlv bkRhdGE7b3BpbmlvbkRhdGE9bmV3IFlBSE9PLnV0aWwuRGF0YVNvdXJjZShkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWtoLXJhdGluZ3MnKS5nZXRFbGVtZW50 c0J5VGFnTmFtZSgndGFibGUnKVswXSx7cmVzcG9uc2VUeXBlOllBSE9PLnV0aWwu RGF0YVNvdXJjZS5UWVBFX0hUTUxUQUJMRSxyZXNwb25zZVNjaGVtYTp7ZmllbGRz OlsicmVzcG9uc2UiLCJjb3VudCJdfX0pO3ZhciBjb2xvcnM9W107b3BpbmlvbkRh dGEuc2VuZFJlcXVlc3QobnVsbCx7c3VjY2VzczpmdW5jdGlvbihyZXEscmVzKXtm b3IodmFyIGk9MCxsZW49cmVzLnJlc3VsdHMubGVuZ3RoO2k8bGVuO2krKyl7c3dp dGNoKHJlcy5yZXN1bHRzW2ldLnJlc3BvbnNlKXtjYXNlIFlBSE9PLlNlYXJjaC5B bnN3ZXJzLmxhYmVscy5yYXRpbmdzQ2hhcnQucmF0aW5nc1swXTpjb2xvcnNbaV09 MHgyQzVFMTQ7YnJlYWs7Y2FzZSBZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMu cmF0aW5nc0NoYXJ0LnJhdGluZ3NbMV06Y29sb3JzW2ldPTB4Mzk5QTA2O2JyZWFr O2Nhc2UgWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnJhdGluZ3NDaGFydC5y YXRpbmdzWzJdOmNvbG9yc1tpXT0weDU0QzQwQTticmVhaztjYXNlIFlBSE9PLlNl YXJjaC5BbnN3ZXJzLmxhYmVscy5yYXRpbmdzQ2hhcnQucmF0aW5nc1szXTpjb2xv cnNbaV09MHhDNUU0OUQ7YnJlYWs7Y2FzZSBZQUhPTy5TZWFyY2guQW5zd2Vycy5s YWJlbHMucmF0aW5nc0NoYXJ0LnJhdGluZ3NbNF06Y29sb3JzW2ldPTB4NjY2NjY2 O2JyZWFrO2Nhc2UgWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnJhdGluZ3ND aGFydC5yYXRpbmdzWzVdOmNvbG9yc1tpXT0weENDQ0NDQzticmVhaztjYXNlIFlB SE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5yYXRpbmdzQ2hhcnQub3RoZXI6Y29s b3JzW2ldPTB4ODBCNENDO2JyZWFrO319fX0pO3ZhciBiZD1ZQUhPTy51dGlsLkRv bS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZCcsJ2RpdicsJ3lhbi1raC1yYXRp bmdzJylbMF07dmFyIHRhYmxlPWJkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJs ZScpWzBdO3RhYmxlLmNsYXNzTmFtZT0naGlkZGVuJztjaGFydEVsPWRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1lBSE9PLnV0aWwuRG9tLmluc2VydEJlZm9y ZShjaGFydEVsLHRhYmxlKTtZQUhPTy51dGlsLkRvbS5zZXRTdHlsZShjaGFydEVs LCdoZWlnaHQnLCcxMjVweCcpO215Q2hhcnQ9bmV3IFlBSE9PLndpZGdldC5QaWVD aGFydChjaGFydEVsLG9waW5pb25EYXRhLHtkYXRhRmllbGQ6ImNvdW50IixjYXRl Z29yeUZpZWxkOiJyZXNwb25zZSIsZGF0YVRpcEZ1bmN0aW9uOmZ1bmN0aW9uKGl0 ZW0saW5kZXgsc2VyaWVzKXt2YXIgdG90YWw9MDtmb3IoaSBpbiBzZXJpZXMuZGF0 YSl7dG90YWwrPXBhcnNlSW50KHNlcmllcy5kYXRhW2ldLmNvdW50LDEwKTt9CnZh ciB0b29sVGlwVGV4dD1pdGVtLnJlc3BvbnNlO3Rvb2xUaXBUZXh0Kz0iXG4iKygo aXRlbS5jb3VudC90b3RhbCkqMTAwKS50b0ZpeGVkKDEpKyclJztyZXR1cm4gdG9v bFRpcFRleHQ7fSxzZXJpZXM6W3t5RmllbGQ6ImNvdW50IixzdHlsZTp7Y29sb3Jz OmNvbG9yc319XSxzdHlsZTp7ZGF0YVRpcDp7Ym9yZGVyOntjb2xvcjoweENDQ0ND Q319LGJhY2tncm91bmQ6e2NvbG9yOjB4RjBGOEU2fSxwYWRkaW5nOjAsbGVnZW5k OntkaXNwbGF5OiJyaWdodCIscGFkZGluZzoxMCxzcGFjaW5nOjUsZm9udDp7bmFt ZToiQXJpYWwiLGNvbG9yOjB4MzMzMzMzLHNpemU6MTJ9fX19KTt9CmZ1bmN0aW9u IGluaXRSYXRlcigpe3ZhciBkaXY9bmV3IFlBSE9PLnV0aWwuRWxlbWVudChkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWFydGljbGUtcmF0aW5nJykpLGZvcm09 ZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3JtJyksYW5jaG9yPWRpdi5nZXRF bGVtZW50c0J5VGFnTmFtZSgnYScpO2Z1bmN0aW9uIGhhbmRsZVN1Y2Nlc3Mobyl7 dmFyIGRhdGE9WUFIT08ubGFuZy5KU09OLnBhcnNlKG8ucmVzcG9uc2VUZXh0KSxj aGFydD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWtoLXJhdGluZ3MnKSx0 ZW1wO2Rpdi5yZW1vdmVDbGFzcygnbG9hZGluZycpO3RlbXA9ZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnZGl2Jyk7dGVtcC5pbm5lckhUTUw9ZGF0YS53aWRnZXQ7dmFy IHRlbXAyPXRlbXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpO2lmKHRlbXAy Lmxlbmd0aCl7ZGl2LnNldCgnaW5uZXJIVE1MJyx0ZW1wMlswXS5pbm5lckhUTUwp O30KZWxzZXtkaXYuc2V0KCdpbm5lckhUTUwnLCcnKTt9CmlmKGNoYXJ0JiZkYXRh LmNoYXJ0KXt2YXIgY2hhcnQ9bmV3IFlBSE9PLnV0aWwuRWxlbWVudChjaGFydCk7 aWYoY2hhcnQpe3ZhciBib2R5PWNoYXJ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUo J2JkJylbMF07Ym9keS5pbm5lckhUTUw9ZGF0YS5jaGFydDtpbml0Q2hhcnQoKTt9 fQp2YXIgY3RhPWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjdGEtYnV0dG9u JywnaW5wdXQnKTtpZihjdGEubGVuZ3RoKXtZQUhPTy5TZWFyY2guQW5zd2Vycy5j dGEuY29udmVydChjdGFbMF0pO30KaW5pdFJhdGVyKCk7fQppZihmb3JtLmxlbmd0 aCl7Zm9ybT1uZXcgWUFIT08udXRpbC5FbGVtZW50KGZvcm1bMF0pO1lBSE9PLnV0 aWwuRXZlbnQucmVtb3ZlTGlzdGVuZXIoZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFt ZSgnYnV0dG9uJykpO1lBSE9PLnV0aWwuRXZlbnQuYWRkTGlzdGVuZXIoZm9ybS5n ZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyksJ2NsaWNrJyxmdW5jdGlvbihl KXtZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1lBSE9PLlNlYXJj aC5BbnN3ZXJzLmZvcm1TdWJtaXQoZm9ybSx7c3VjY2VzczpoYW5kbGVTdWNjZXNz fSk7ZGl2LnNldCgnaW5uZXJIVE1MJyxZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMudXNlclByb2ZpbGVDYXJkLmxvYWRpbmcpO2Rpdi5hZGRDbGFzcygnbG9hZGlu ZycpO30pO2Zvcm0ub24oJ3N1Ym1pdCcsZnVuY3Rpb24oZSl7WUFIT08udXRpbC5F dmVudC5wcmV2ZW50RGVmYXVsdChlKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5mb3Jt U3VibWl0KGZvcm0se3N1Y2Nlc3M6aGFuZGxlU3VjY2Vzc30pO2Rpdi5zZXQoJ2lu bmVySFRNTCcsWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnVzZXJQcm9maWxl Q2FyZC5sb2FkaW5nKTtkaXYuYWRkQ2xhc3MoJ2xvYWRpbmcnKTt9KTt9CmVsc2Ug aWYoYW5jaG9yLmxlbmd0aCl7YW5jaG9yPW5ldyBZQUhPTy51dGlsLkVsZW1lbnQo YW5jaG9yWzBdKTthbmNob3Iub24oJ2NsaWNrJyxmdW5jdGlvbihlKXtZQUhPTy51 dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUpO1lBSE9PLnV0aWwuQ29ubmVjdC5h c3luY1JlcXVlc3QoJ2dldCcsZG9jdW1lbnQubG9jYXRpb24rJy91cGRhdGVSYXRp bmcnLHtzdWNjZXNzOmhhbmRsZVN1Y2Nlc3N9KTtkaXYuc2V0KCdpbm5lckhUTUwn LFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy51c2VyUHJvZmlsZUNhcmQubG9h ZGluZyk7ZGl2LmFkZENsYXNzKCdsb2FkaW5nJyk7fSk7fX0KcmV0dXJue2luaXQ6 ZnVuY3Rpb24oKXtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWtoLXJh dGluZ3MnKSl7aW5pdENoYXJ0KCk7fQppZihkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgneWFuLWthJykmJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tYXJ0aWNs ZS1yYXRpbmcnKSl7aW5pdFJhdGVyKCk7fX19O30oKTtZQUhPTy5TZWFyY2guQW5z d2Vycy5mb3JtU3VibWl0PWZ1bmN0aW9uKGZvcm0sY2FsbGJhY2spe3ZhciBwYXJh bXM9W107dmFyIHRhZ3M9WydpbnB1dCcsJ3RleHRhcmVhJywnYnV0dG9uJywnc2Vs ZWN0J107Zm9yKHZhciBpIGluIHRhZ3Mpe1lBSE9PLnV0aWwuRG9tLmJhdGNoKGZv cm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnc1tpXSksZnVuY3Rpb24oZWwpe2lm KChlbC50eXBlPT0ncmFkaW8nfHxlbC50eXBlPT0nY2hlY2tib3gnKSkKe2lmKGVs LmNoZWNrZWQpe3BhcmFtcy5wdXNoKGVsLm5hbWUrJz0nK2VsLnZhbHVlKTt9fQpl bHNle3BhcmFtcy5wdXNoKGVsLm5hbWUrJz0nK2VsLnZhbHVlKTt9fSk7fQpwYXJh bXM9cGFyYW1zLmpvaW4oJyYnKTtZQUhPTy51dGlsLkNvbm5lY3QuYXN5bmNSZXF1 ZXN0KGZvcm0uZ2V0KCdtZXRob2QnKSxmb3JtLmdldCgnYWN0aW9uJyksY2FsbGJh Y2sscGFyYW1zKTt9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLm5hdkJhcj1mdW5jdGlv bigpe3ZhciBob3ZlclRpbWVyLG92ZXJUaW1lcixtZW51cz1bXTtmdW5jdGlvbiBj cmVhdGVEcm9wRG93bihlbCl7dmFyIGVsPVlBSE9PLnV0aWwuRG9tLmdldChlbCk7 aWYoZWwpe1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKGVsLCdtZW51Jyk7dmFyIGNv bnRlbnRzPVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N1 YicsJyonLGVsKTtpZihjb250ZW50cy5sZW5ndGgpe2NvbnRlbnRzPWNvbnRlbnRz WzBdO21lbnVzW2VsLmlkXT1uZXcgWUFIT08ud2lkZ2V0Lk92ZXJsYXkoZWwuaWQr Jy1tZW51Jyx7dmlzaWJsZTpmYWxzZSxjb25zdHJhaW50b3ZpZXdwb3J0OmZhbHNl LHpJbmRleDotMX0pO21lbnVzW2VsLmlkXS5zZXRCb2R5KGNvbnRlbnRzKTttZW51 c1tlbC5pZF0ucmVuZGVyKGVsKTt9CmVsc2UKe21lbnVzW2VsLmlkXT1mYWxzZTt9 CllBSE9PLnV0aWwuRXZlbnQub24oZWwsJ21vdXNlb3ZlcicsZnVuY3Rpb24oZSl7 WUFIT08udXRpbC5Eb20uYWRkQ2xhc3MoZWwsJ2hvdmVyJyk7Zm9yKHZhciBtZW51 IGluIG1lbnVzKXtpZihtZW51IT09dGhpcy5pZCl7WUFIT08udXRpbC5Eb20ucmVt b3ZlQ2xhc3MobWVudSwnaG92ZXInKTtpZihtZW51c1ttZW51XSl7bWVudXNbbWVu dV0uaGlkZSgpO319CmVsc2UgaWYobWVudXNbbWVudV0pe2NsZWFyVGltZW91dChv dmVyVGltZXIpO2NsZWFyVGltZW91dChob3ZlclRpbWVyKTtvdmVyVGltZXI9c2V0 VGltZW91dChmdW5jdGlvbigpe21lbnVzW2VsLmlkXS5jZmcuc2V0UHJvcGVydHko J2NvbnRleHQnLFtlbCwndGwnLCdibCddKTttZW51c1tlbC5pZF0uc2hvdygpO3Zh ciBwYW5lbD1ZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5 dWktbW9kdWxlJywnZGl2JyxlbClbMF07WUFIT08udXRpbC5Eb20uc2V0U3R5bGUo cGFuZWwsJ3RvcCcsKHBhbmVsLm9mZnNldFRvcC0yKSsncHgnKTt9LDIwMCk7fX19 KTtZQUhPTy51dGlsLkV2ZW50Lm9uKGVsLCdtb3VzZW91dCcsZnVuY3Rpb24oZSl7 dmFyIHNlbGY9dGhpcztjbGVhclRpbWVvdXQob3ZlclRpbWVyKTtob3ZlclRpbWVy PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtZQUhPTy51dGlsLkRvbS5yZW1vdmVDbGFz cyhlbCwnaG92ZXInKTtpZihtZW51c1tzZWxmLmlkXSl7bWVudXNbc2VsZi5pZF0u aGlkZSgpO319LDUwMCk7fSk7WUFIT08udXRpbC5FdmVudC5vbihlbC5nZXRFbGVt ZW50c0J5VGFnTmFtZSgnYScpLCdmb2N1cycsZnVuY3Rpb24oZSl7dmFyIHNlbGY9 WUFIT08udXRpbC5Eb20uZ2V0QW5jZXN0b3JCeUNsYXNzTmFtZSh0aGlzLCdtZW51 Jyk7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3Moc2VsZiwnaG92ZXInKTtmb3IodmFy IG1lbnUgaW4gbWVudXMpe2lmKG1lbnUhPT1zZWxmLmlkKXtZQUhPTy51dGlsLkRv bS5yZW1vdmVDbGFzcyhtZW51LCdob3ZlcicpO2lmKG1lbnVzW21lbnVdKXttZW51 c1ttZW51XS5oaWRlKCk7fX0KZWxzZSBpZihtZW51c1ttZW51XSl7bWVudXNbc2Vs Zi5pZF0uY2ZnLnNldFByb3BlcnR5KCdjb250ZXh0Jyxbc2VsZiwndGwnLCdibCdd KTttZW51c1tzZWxmLmlkXS5zaG93KCk7dmFyIHBhbmVsPVlBSE9PLnV0aWwuRG9t LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3l1aS1tb2R1bGUnLCdkaXYnLGVsKVsw XTtZQUhPTy51dGlsLkRvbS5zZXRTdHlsZShwYW5lbCwndG9wJywocGFuZWwub2Zm c2V0VG9wLTIpKydweCcpO2NsZWFyVGltZW91dChob3ZlclRpbWVyKTt9fX0pO1lB SE9PLnV0aWwuRXZlbnQub24oZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKSwn Ymx1cicsZnVuY3Rpb24oZSl7dmFyIHNlbGY9WUFIT08udXRpbC5Eb20uZ2V0QW5j ZXN0b3JCeUNsYXNzTmFtZSh0aGlzLCdtZW51Jyk7aG92ZXJUaW1lcj1zZXRUaW1l b3V0KGZ1bmN0aW9uKCl7WUFIT08udXRpbC5Eb20ucmVtb3ZlQ2xhc3Moc2VsZiwn aG92ZXInKTtpZihtZW51c1tzZWxmLmlkXSl7bWVudXNbc2VsZi5pZF0uaGlkZSgp O319LDUwMCk7fSk7fX0KcmV0dXJue2luaXQ6ZnVuY3Rpb24oKXt2YXIgYmFyPWRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tbmF2Jyk7aWYoYmFyKXtjcmVhdGVE cm9wRG93bigneWFuLW5hdi1ob21lJyk7Y3JlYXRlRHJvcERvd24oJ3lhbi1uYXYt YnJvd3NlJyk7Y3JlYXRlRHJvcERvd24oJ3lhbi1uYXYtbXktYWN0aXZpdHknKTtj cmVhdGVEcm9wRG93bigneWFuLW5hdi1hYm91dCcpO3ZhciBpbnA9ZG9jdW1lbnQu Z2V0RWxlbWVudEJ5SWQoJ2Jhbm5lci1hc2snKTtZQUhPTy5TZWFyY2guQW5zd2Vy cy5saW1pdENoYXJhY3RlcnMoaW5wLDExMCxmYWxzZSwnJywibm9uZSIpO2lmKGlu cCkKe3ZhciBhc2tCb3g9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1iYW5u ZXItYXNrJyk7dmFyIGxibD1hc2tCb3guZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xh YmVsJylbMF07dmFyIG9yaWdpbmFsVmFsdWU9aW5wLnZhbHVlO1lBSE9PLnV0aWwu RG9tLmFkZENsYXNzKGxibCwnb2Zmc2NyZWVuJyk7aW5wLmRlZmF1bHRWYWx1ZT1s YmwuaW5uZXJIVE1MO2lucC52YWx1ZT1vcmlnaW5hbFZhbHVlO2lmKGlucC52YWx1 ZT09PWxibC5pbm5lckhUTUx8fGlucC52YWx1ZT09PScnKXtZQUhPTy51dGlsLkRv bS5hZGRDbGFzcyhpbnAsJ2RlZmF1bHQnKTtpbnAuZGVmYXVsdFZhbHVlPWxibC5p bm5lckhUTUw7aW5wLnZhbHVlPWxibC5pbm5lckhUTUw7fQpZQUhPTy51dGlsLkV2 ZW50Lm9uKGlucCwnZm9jdXMnLGZ1bmN0aW9uKGUpe1lBSE9PLnV0aWwuRG9tLnJl bW92ZUNsYXNzKHRoaXMsJ2RlZmF1bHQnKTtpZih0aGlzLnZhbHVlPT09bGJsLmlu bmVySFRNTHx8dGhpcy52YWx1ZT09PScnKXt0aGlzLnZhbHVlPScnO319KTtZQUhP Ty51dGlsLkV2ZW50Lm9uKGlucCwnYmx1cicsZnVuY3Rpb24oZSl7aWYodGhpcy52 YWx1ZT09PWxibC5pbm5lckhUTUx8fHRoaXMudmFsdWU9PT0nJyl7WUFIT08udXRp bC5Eb20uYWRkQ2xhc3MoaW5wLCdkZWZhdWx0Jyk7dGhpcy52YWx1ZT1sYmwuaW5u ZXJIVE1MO319KTt9fX19O30oKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5zZWFyY2hC YXI9ZnVuY3Rpb24oKXt2YXIgWVVEPVlBSE9PLnV0aWwuRG9tLFlVRT1ZQUhPTy51 dGlsLkV2ZW50O3ZhciBsYmwsaW5wO2Z1bmN0aW9uIGZpeENUQVN1Ym1pdHNBZ2Fp bigpe1lVRS5yZW1vdmVMaXN0ZW5lcihZVUQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZSgnY3RhLWJ1dHRvbicsJ2J1dHRvbicsaW5wLmZvcm0pLCdjbGljaycpO1lVRS5h ZGRMaXN0ZW5lcihpbnAuZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9u JyksJ2NsaWNrJyxmdW5jdGlvbihlKXtZVUUucHJldmVudERlZmF1bHQoZSk7aWYo WUFIT08ubGFuZy50cmltKGlucC52YWx1ZSkubGVuZ3RoPjAmJmlucC52YWx1ZSE9 PWxibC5pbm5lckhUTUwmJmlucC52YWx1ZSE9PScnJiZpbnAudmFsdWUhPT1ZQUhP Ty5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc2VhcmNoRm9ybS5lbnRlclNlYXJjaFRl cm1zKXt0aGlzLmZvcm0uc3VibWl0KCk7fQplbHNlCntZVUQuYWRkQ2xhc3MoaW5w LCdlcnJvcicpO2lucC52YWx1ZT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMu c2VhcmNoRm9ybS5lbnRlclNlYXJjaFRlcm1zO319KTtZVUUub24oaW5wLmZvcm0s J3N1Ym1pdCcsZnVuY3Rpb24oZSl7WVVFLnByZXZlbnREZWZhdWx0KGUpO2lmKFlB SE9PLmxhbmcudHJpbShpbnAudmFsdWUpLmxlbmd0aD4wJiZpbnAudmFsdWUhPT1s YmwuaW5uZXJIVE1MJiZpbnAudmFsdWUhPT0nJyYmaW5wLnZhbHVlIT09WUFIT08u U2VhcmNoLkFuc3dlcnMubGFiZWxzLnNlYXJjaEZvcm0uZW50ZXJTZWFyY2hUZXJt cyl7dGhpcy5zdWJtaXQoKTt9CmVsc2UKe1lVRC5hZGRDbGFzcyhpbnAsJ2Vycm9y Jyk7aW5wLnZhbHVlPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5zZWFyY2hG b3JtLmVudGVyU2VhcmNoVGVybXM7fX0pO30KcmV0dXJue2luaXQ6ZnVuY3Rpb24o KXt2YXIgYmFyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4taGVhZGVyLXNl YXJjaGJveCcpO2lmKGJhciYmWUFIT08udXRpbC5Eb20uaGFzQ2xhc3MoZG9jdW1l bnQuYm9keSwnbmV3LWhlYWRlcicpKXtsYmw9YmFyLmdldEVsZW1lbnRzQnlUYWdO YW1lKCdsYWJlbCcpWzBdO2lucD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFu LXAnKTt2YXIgb3JpZ2luYWxWYWx1ZT1pbnAudmFsdWU7WUFIT08udXRpbC5Eb20u YWRkQ2xhc3MobGJsLCdvZmZzY3JlZW4nKTtpbnAuZGVmYXVsdFZhbHVlPWxibC5p bm5lckhUTUw7aW5wLnZhbHVlPW9yaWdpbmFsVmFsdWU7aWYoaW5wLnZhbHVlPT09 bGJsLmlubmVySFRNTHx8aW5wLnZhbHVlPT09Jycpe1lVRC5yZW1vdmVDbGFzcyhp bnAsJ2Vycm9yJyk7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3MoaW5wLCdkZWZhdWx0 Jyk7aW5wLmRlZmF1bHRWYWx1ZT1sYmwuaW5uZXJIVE1MO2lucC52YWx1ZT1sYmwu aW5uZXJIVE1MO30KWUFIT08udXRpbC5FdmVudC5vbihpbnAsJ2ZvY3VzJyxmdW5j dGlvbihlKXtZVUQucmVtb3ZlQ2xhc3MoaW5wLCdlcnJvcicpO1lBSE9PLnV0aWwu RG9tLnJlbW92ZUNsYXNzKHRoaXMsJ2RlZmF1bHQnKTtpZih0aGlzLnZhbHVlPT09 bGJsLmlubmVySFRNTHx8dGhpcy52YWx1ZT09PScnfHx0aGlzLnZhbHVlPT09WUFI T08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnNlYXJjaEZvcm0uZW50ZXJTZWFyY2hU ZXJtcyl7dGhpcy52YWx1ZT0nJzt9fSk7WUFIT08udXRpbC5FdmVudC5vbihpbnAs J2JsdXInLGZ1bmN0aW9uKGUpe2lmKHRoaXMudmFsdWU9PT1sYmwuaW5uZXJIVE1M fHx0aGlzLnZhbHVlPT09Jycpe1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKGlucCwn ZGVmYXVsdCcpO3RoaXMudmFsdWU9bGJsLmlubmVySFRNTDt9fSk7Zml4Q1RBU3Vi bWl0c0FnYWluKCk7fX19O30oKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5yZW1vdmVR dWVzdGlvbnM9ZnVuY3Rpb24oKQp7dmFyIGluUHJvZ3Jlc3M7ZnVuY3Rpb24gcG9w dWxhdGVSZW1vdmVMaW5rKGVsKXtZQUhPTy51dGlsLkV2ZW50Lm9uKGVsLCdjbGlj aycsZnVuY3Rpb24oZSl7WUFIT08udXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChl KTtpZighaW5Qcm9ncmVzcyl7dmFyIHFpZD10aGlzLnBhcmVudE5vZGUucGFyZW50 Tm9kZS5pZC5yZXBsYWNlKC9xdWVzdGlvbi0vLCcnKTtwcm9jZXNzUXVlc3Rpb24o cWlkKTt9fSk7fQpmdW5jdGlvbiB1cGRhdGVRdWVzdGlvbihxaWQsZGF0YSl7aWYo IWRhdGEucWlkfHxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXVlc3Rpb24tJytk YXRhLnFpZCkpe3JlbW92ZVF1ZXN0aW9uKHFpZCk7fQp2YXIgcXVlc3Rpb249ZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1ZXN0aW9uLScrcWlkKTtxdWVzdGlvbi5n ZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uaW5uZXJIVE1MPWRhdGEuaHRt bDtxdWVzdGlvbi5pZD0ncXVlc3Rpb24tJytkYXRhLnFpZDt2YXIgcmVtb3ZlTGlu az1ZQUhPTy51dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZW1vdmUn LCdhJyxxdWVzdGlvbik7cG9wdWxhdGVSZW1vdmVMaW5rKHJlbW92ZUxpbmtbMF0p O3ZhciBtZXRob2Q9ZnVuY3Rpb24oZWwpe3ZhciByZT1uZXcgUmVnRXhwKCcoc3Rh ckl0ZW18dW5TdGFySXRlbSknKTtyZXR1cm4ocmUudGVzdChlbC5ocmVmKSYmIWVs LmhyZWYubWF0Y2goJ2xvZ2luJykpO307dmFyIHRhcmdldHM9WUFIT08udXRpbC5E b20uZ2V0RWxlbWVudHNCeShtZXRob2QsJ2EnLHF1ZXN0aW9uKTtpZih0YXJnZXRz Lmxlbmd0aD4wKXtZQUhPTy5TZWFyY2guQW5zd2Vycy5zdGFyUXVlc3Rpb24uaW5p dFN0YXIodGFyZ2V0c1swXSk7fQpZQUhPTy51dGlsLkRvbS5yZW1vdmVDbGFzcyhx dWVzdGlvbiwnbG9hZGluZycpO1lBSE9PLnV0aWwuRG9tLnNldFN0eWxlKHF1ZXN0 aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXSwnb3BhY2l0eScsMSk7 fQpmdW5jdGlvbiBwcm9jZXNzUXVlc3Rpb24ocWlkKXt2YXIgY2FsbGJhY2s9e3N1 Y2Nlc3M6Y2FsbGJhY2tTdWNjZXNzLGZhaWx1cmU6Y2FsbGJhY2tGYWlsLGFyZ3Vt ZW50OnFpZH07dmFyIGV4Y2x1ZGVRaWRzPVtdO3ZhciBsaXM9ZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3lhbi1jcicpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScp O2Zvcih2YXIgaT0wLGxlbj1saXMubGVuZ3RoO2k8bGVuO2krKyl7aWYoWUFIT08u dXRpbC5Eb20uaGFzQ2xhc3MobGlzW2ldLnBhcmVudE5vZGUsJ3F1ZXN0aW9ucycp KXt2YXIgbGk9bGlzW2ldO2V4Y2x1ZGVRaWRzLnB1c2gobGkuaWQucmVwbGFjZSgn cXVlc3Rpb24tJywnJykpO319CmluUHJvZ3Jlc3M9dHJ1ZTt2YXIgY29uZWN0aW9u TWFuYWdlcj1ZQUhPTy51dGlsLkNvbm5lY3QuYXN5bmNSZXF1ZXN0KCdHRVQnLCcv cXVlc3Rpb24vY29udGVudFJvdXRpbmc/YWN0PXJlbW92ZSZxaWQ9JytxaWQrJyZl eGNsdWRlPScrZXhjbHVkZVFpZHMuam9pbignLCcpKycmZG9uZT0nK2RvY3VtZW50 LmxvY2F0aW9uLmhyZWYsY2FsbGJhY2spO3ZhciBxdWVzdGlvbj1kb2N1bWVudC5n ZXRFbGVtZW50QnlJZCgncXVlc3Rpb24tJytxaWQpO3ZhciBmYWRlQW5pbT1uZXcg WUFIT08udXRpbC5BbmltKHF1ZXN0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdk aXYnKVswXSx7b3BhY2l0eTp7dG86MH19LDAuMyk7ZmFkZUFuaW0ub25Db21wbGV0 ZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgcmVtb3ZlTGluaz1ZQUhPTy51dGls LkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZW1vdmUnLCdhJyxxdWVzdGlv bik7cmVtb3ZlTGlua1swXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJlbW92ZUxp bmtbMF0pO1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKHF1ZXN0aW9uLCdsb2FkaW5n Jyk7fSk7ZmFkZUFuaW0uYW5pbWF0ZSgpO30KZnVuY3Rpb24gcmVtb3ZlUXVlc3Rp b24ocWlkKXt2YXIgcXVlc3Rpb249ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3F1 ZXN0aW9uLScrcWlkKTt2YXIgcXVlc3Rpb25zVWw9cXVlc3Rpb24ucGFyZW50Tm9k ZTtxdWVzdGlvbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHF1ZXN0aW9uKTt2YXIg cXVlc3Rpb25zPVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnkoZnVuY3Rpb24o ZWwpe2lmKGVsLnBhcmVudE5vZGU9PXF1ZXN0aW9uc1VsKXtyZXR1cm4gdHJ1ZTt9 CnJldHVybiBmYWxzZTt9LCdsaScscXVlc3Rpb25zVWwpO3ZhciBsZW49cXVlc3Rp b25zLmxlbmd0aDtpZihsZW4pe2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHF1 ZXN0aW9uTGk9cXVlc3Rpb25zW2ldO1lBSE9PLnV0aWwuRG9tLnJlbW92ZUNsYXNz KHF1ZXN0aW9uTGksJ2ZpcnN0Jyk7WUFIT08udXRpbC5Eb20ucmVtb3ZlQ2xhc3Mo cXVlc3Rpb25MaSwnc2Vjb25kJyk7WUFIT08udXRpbC5Eb20ucmVtb3ZlQ2xhc3Mo cXVlc3Rpb25MaSwnYWx0Jyk7aWYoaT09MCl7WUFIT08udXRpbC5Eb20uYWRkQ2xh c3MocXVlc3Rpb25MaSwnZmlyc3QnKTt9CmlmKGk9PTEpe1lBSE9PLnV0aWwuRG9t LmFkZENsYXNzKHF1ZXN0aW9uTGksJ3NlY29uZCcpO30KaWYoaSUyKXtZQUhPTy51 dGlsLkRvbS5hZGRDbGFzcyhxdWVzdGlvbkxpLCdhbHQnKTt9fX0KZWxzZXt2YXIg bm9RdWVzdGlvbnNUZXh0PVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5zdWdn ZXN0ZWRRdWVzdGlvbnMubm9RdWVzdGlvbnM7bm9RdWVzdGlvbnNUZXh0PW5vUXVl c3Rpb25zVGV4dC5yZXBsYWNlKCclT1BFTl9QUkVGRVJFTkNFU19MSU5LJScsJzxh IGhyZWY9Ii9teS9teV9lZGl0Ij4nKTtub1F1ZXN0aW9uc1RleHQ9bm9RdWVzdGlv bnNUZXh0LnJlcGxhY2UoJyVDTE9TRV9QUkVGRVJFTkNFU19MSU5LJScsJzwvYT4n KTtxdWVzdGlvbnNVbC5wYXJlbnROb2RlLmlubmVySFRNTD0nPHA+Jytub1F1ZXN0 aW9uc1RleHQrJzwvcD4nO319CmZ1bmN0aW9uIGNhbGxiYWNrU3VjY2VzcyhvKXtp ZihvLnJlc3BvbnNlVGV4dCl7dXBkYXRlUXVlc3Rpb24oby5hcmd1bWVudCxldmFs KCcoJytvLnJlc3BvbnNlVGV4dCsnKScpKTt9CmVsc2V7cmVtb3ZlUXVlc3Rpb24o by5hcmd1bWVudCk7fQppblByb2dyZXNzPWZhbHNlO30KZnVuY3Rpb24gY2FsbGJh Y2tGYWlsKG8pe3JlbW92ZVF1ZXN0aW9uKG8uYXJndW1lbnQpO2luUHJvZ3Jlc3M9 ZmFsc2U7fQpyZXR1cm57aW5pdDpmdW5jdGlvbigpe2lmKGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKCd5YW4tY3InKSkKe3ZhciBxdWVzdGlvbkxpc3RzPVlBSE9PLnV0 aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3F1ZXN0aW9ucycsJ3VsJyk7 Zm9yKHZhciBpPTAsbGVuPXF1ZXN0aW9uTGlzdHMubGVuZ3RoO2k8bGVuO2krKyl7 dmFyIHJlbW92ZUxpbmtzPVlBSE9PLnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFz c05hbWUoJ3JlbW92ZScsJ2EnLHF1ZXN0aW9uTGlzdHNbaV0pO2Zvcih2YXIgaj0w LGxlbjI9cmVtb3ZlTGlua3MubGVuZ3RoO2o8bGVuMjtqKyspe3BvcHVsYXRlUmVt b3ZlTGluayhyZW1vdmVMaW5rc1tqXSk7fX19fSxwb3B1bGF0ZVJlbW92ZUxpbms6 cG9wdWxhdGVSZW1vdmVMaW5rfTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMudG9n Z2xlPWZ1bmN0aW9uKG9Db25maWcpCnt2YXIgWVVEPVlBSE9PLnV0aWwuRG9tO3Zh ciBZVUU9WUFIT08udXRpbC5FdmVudDtmdW5jdGlvbiB0b2dnbGVJdCgpe2lmKFlV RC5oYXNDbGFzcyhvQ29uZmlnLnRvZ2dsZUVsZW1lbnQsJ3RvZ2dsZVNob3cnKSl7 WVVELnJlcGxhY2VDbGFzcyhvQ29uZmlnLnRvZ2dsZUVsZW1lbnQsJ3RvZ2dsZVNo b3cnLCd0b2dnbGVIaWRlJyk7WVVELnJlcGxhY2VDbGFzcyhvQ29uZmlnLmNvbnRl bnROb2RlLCd0b2dnbGVDb250ZW50U2hvdycsJ3RvZ2dsZUNvbnRlbnRIaWRlJyk7 b0NvbmZpZy50b2dnbGVFbGVtZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlPW9Db25m aWcuc2hvd1RleHQ7b0NvbmZpZy50b2dnbGVFbGVtZW50LmhyZWY9JyNzaG93LXN1 Z2dlc3RlZC1xdWVzdGlvbnMnO1lBSE9PLnV0aWwuQ29va2llLnNldFN1YigiYW5z d2Vycy1zZXNzaW9uIiwndG9nZ2xlLScrb0NvbmZpZy50b2dnbGVFbGVtZW50Lmlk LCd0b2dnbGVIaWRlJyx7ZG9tYWluOiJhbnN3ZXJzLnlhaG9vLmNvbSJ9KTt9CmVs c2V7WVVELnJlcGxhY2VDbGFzcyhvQ29uZmlnLnRvZ2dsZUVsZW1lbnQsJ3RvZ2ds ZUhpZGUnLCd0b2dnbGVTaG93Jyk7WVVELnJlcGxhY2VDbGFzcyhvQ29uZmlnLmNv bnRlbnROb2RlLCd0b2dnbGVDb250ZW50SGlkZScsJ3RvZ2dsZUNvbnRlbnRTaG93 Jyk7b0NvbmZpZy50b2dnbGVFbGVtZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlPW9D b25maWcuaGlkZVRleHQ7b0NvbmZpZy50b2dnbGVFbGVtZW50LmhyZWY9JyNoaWRl LXN1Z2dlc3RlZC1xdWVzdGlvbnMnO1lBSE9PLnV0aWwuQ29va2llLnJlbW92ZVN1 YigiYW5zd2Vycy1zZXNzaW9uIiwndG9nZ2xlLScrb0NvbmZpZy50b2dnbGVFbGVt ZW50LmlkLHtkb21haW46ImFuc3dlcnMueWFob28uY29tIn0pO319CmZ1bmN0aW9u IHRvZ2dsZUNsaWNrKGUpe1lVRS5wcmV2ZW50RGVmYXVsdChlKTtZQUhPTy5TZWFy Y2guQW5zd2Vycy50b2dnbGVkRXZlbnQuZmlyZSgpO30KZnVuY3Rpb24gbG9hZFRv Z2dsZSgpe2lmKCFZVUQuaW5Eb2N1bWVudChvQ29uZmlnLmNvbnRhaW5lck5vZGUp fHwhWVVELmluRG9jdW1lbnQob0NvbmZpZy5jb250ZW50Tm9kZSkpe3JldHVybiBm YWxzZTt9CnZhciB0b2dnbGVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2EnKTt2YXIgdG9nZ2xlVGV4dD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvQ29u ZmlnLmhpZGVUZXh0KTt0b2dnbGVFbGVtZW50LmFwcGVuZENoaWxkKHRvZ2dsZVRl eHQpO3RvZ2dsZUVsZW1lbnQuaWQ9KHR5cGVvZiBvQ29uZmlnLmNyZWF0ZVRvZ2ds ZSE9PSJ1bmRlZmluZWQiP29Db25maWcuY3JlYXRlVG9nZ2xlLnRvZ2dsZUlEOicn KTt0b2dnbGVFbGVtZW50LmhyZWY9JyMnK29Db25maWcuY3JlYXRlVG9nZ2xlLnRv Z2dsZUlEO29Db25maWcuY29udGFpbmVyTm9kZS5hcHBlbmRDaGlsZCh0b2dnbGVF bGVtZW50KTtvQ29uZmlnLnRvZ2dsZUVsZW1lbnQ9dG9nZ2xlRWxlbWVudDtZQUhP Ty51dGlsLkRvbS5hZGRDbGFzcyhvQ29uZmlnLnRvZ2dsZUVsZW1lbnQsJ3RvZ2ds ZVNob3cnKTtpZihvQ29uZmlnLmF1dG9IaWRlPT09dHJ1ZXx8WUFIT08udXRpbC5D b29raWUuZ2V0U3ViKCJhbnN3ZXJzLXNlc3Npb24iLCJ0b2dnbGUtIit0b2dnbGVF bGVtZW50LmlkKT09J3RvZ2dsZUhpZGUnKXtZQUhPTy5TZWFyY2guQW5zd2Vycy50 b2dnbGVkRXZlbnQuZmlyZSgpO30KWVVFLmFkZExpc3RlbmVyKG9Db25maWcudG9n Z2xlRWxlbWVudCwnY2xpY2snLHRvZ2dsZUNsaWNrKTtyZXR1cm4gdHJ1ZTt9CllB SE9PLlNlYXJjaC5BbnN3ZXJzLnRvZ2dsZWRFdmVudC5zdWJzY3JpYmUodG9nZ2xl SXQpO3JldHVybntpbml0OmZ1bmN0aW9uKCl7aWYoIWxvYWRUb2dnbGUoKSl7cmV0 dXJuIGZhbHNlO319fTt9O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmhvbWVQYWdlVG9n Z2xlPWZ1bmN0aW9uKCkKe3JldHVybntpbml0OmZ1bmN0aW9uKCl7aWYoZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1jcicpKQp7dmFyIG9Db25maWc9e2NvbnRh aW5lck5vZGU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1jcicpLGNyZWF0 ZVRvZ2dsZTp7dG9nZ2xlSUQ6J3N1Z2dlc3RlZC10b2dnbGUnfSxhdXRvSGlkZTpm YWxzZSxzaG93VGV4dDpZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuYW5zd2Vy c0NvbXBhY3Quc2hvdyxoaWRlVGV4dDpZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJl bHMuYW5zd2Vyc0NvbXBhY3QuaGlkZSxjb250ZW50Tm9kZTpZQUhPTy51dGlsLkRv bS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZCcsJ2RpdicsZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3lhbi1jcicpKVswXX07dmFyIG9Ub2dnbGU9bmV3IFlBSE9P LlNlYXJjaC5BbnN3ZXJzLnRvZ2dsZShvQ29uZmlnKTtvVG9nZ2xlLmluaXQoKTt9 fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLm90aGVyQW5zd2Vyc1RvZ2dsZT1m dW5jdGlvbigpCntyZXR1cm57aW5pdDpmdW5jdGlvbigpe3ZhciBlbD1kb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgneWFuLWFuc3dlcnMnKTtpZihlbCYmWUFIT08udXRp bC5Eb20uaGFzQ2xhc3MoZWwsJ2Zyb20tc2VhcmNoJykpCnt2YXIgb0NvbmZpZz17 Y29udGFpbmVyTm9kZTpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLWFuc3dl cnMnKSxjcmVhdGVUb2dnbGU6e3RvZ2dsZUlEOidvdGhlci1hbnN3ZXJzLXRvZ2ds ZSd9LGF1dG9IaWRlOnRydWUsc2hvd1RleHQ6WUFIT08uU2VhcmNoLkFuc3dlcnMu bGFiZWxzLmFuc3dlcnNDb21wYWN0LnNob3csaGlkZVRleHQ6WUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLmFuc3dlcnNDb21wYWN0LmhpZGUsY29udGVudE5vZGU6 ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1hbnN3ZXJzJyl9O3ZhciBvVG9n Z2xlPW5ldyBZQUhPTy5TZWFyY2guQW5zd2Vycy50b2dnbGUob0NvbmZpZyk7b1Rv Z2dsZS5pbml0KCk7fX19O30oKTtZQUhPTy5VcGRhdGVzLkRpc2Nsb3N1cmUubWFu YWdlci5yZWdpc3RlclBvc3RMaW5rQ2FsbGJhY2soeyJmbiI6ZnVuY3Rpb24oKXt2 YXIgYXNrUHJldmlld0Zvcm09WUFIT08udXRpbC5Eb20uZ2V0KCd5YW4tYXNrLXBy ZXZpZXcnKTt2YXIgYW5zd2VyUHJldmlld0Zvcm09WUFIT08udXRpbC5Eb20uZ2V0 KCd5YW4tYW5zd2VyLXByZXZpZXcnKTtpZihhc2tQcmV2aWV3Rm9ybXx8YW5zd2Vy UHJldmlld0Zvcm0pe2lmKGFza1ByZXZpZXdGb3JtKXt2YXIgcHJldmlld0Zvcm09 YXNrUHJldmlld0Zvcm07fWVsc2UgaWYoYW5zd2VyUHJldmlld0Zvcm0pe3ZhciBw cmV2aWV3Rm9ybT1hbnN3ZXJQcmV2aWV3Rm9ybTt9CmlmKHByZXZpZXdGb3JtKXt2 YXIgcmVsb2FkRm9ybT1mdW5jdGlvbigpe3ZhciBvQnV0dG9uc05vZGVzPVlBSE9P LnV0aWwuRG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2J1dHRvbnMnLCdkaXYn LHByZXZpZXdGb3JtKTtpZihvQnV0dG9uc05vZGVzWzBdKXt2YXIgb05vZGU9ZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtvTm9kZS5zZXRBdHRyaWJ1dGUo J3R5cGUnLCdoaWRkZW4nKTtvTm9kZS5uYW1lPSdsaW5rLWFjY291bnQnO29Ob2Rl LnZhbHVlPSd0cnVlJzt2YXIgb0Zvcm1CdXR0b249b0J1dHRvbnNOb2Rlc1swXTtv Rm9ybUJ1dHRvbi5hcHBlbmRDaGlsZChvTm9kZSk7cHJldmlld0Zvcm0uc3VibWl0 KCk7fX07dmFyIGNhbGxiYWNrPXtzdWNjZXNzOmZ1bmN0aW9uKG8pe2lmKG8ucmVz cG9uc2VUZXh0KXtwcmV2aWV3Rm9ybS5lbGVtZW50c1snY3J1bWInXS52YWx1ZT1l dmFsKCcoJytvLnJlc3BvbnNlVGV4dCsnKScpO30KZWxzZXtyZWxvYWRGb3JtKCk7 fX0sZmFpbHVyZTpmdW5jdGlvbihvKXtyZWxvYWRGb3JtKCk7fX07WUFIT08udXRp bC5Db25uZWN0LmFzeW5jUmVxdWVzdCgnR0VUJywnL215L2NydW1iJyxjYWxsYmFj ayk7fX19fSk7WUFIT08uU2VhcmNoLkFuc3dlcnMuY29udGFjdEFjdGlvbnM9ZnVu Y3Rpb24oKQp7dmFyIFlVRD1ZQUhPTy51dGlsLkRvbTt2YXIgWVVFPVlBSE9PLnV0 aWwuRXZlbnQ7ZnVuY3Rpb24gcmVzZXRQcm9maWxlQ2FyZHModHlwZSxhcmdzKXtp ZihZVUQuZ2V0KCd5YW4tdXNlci1wcm9maWxlLWNhcmQnKSkKe3ZhciBvbGRQcm9m aWxlQ2FyZHM9WVVELmdldCgneWFuLXVzZXItcHJvZmlsZS1jYXJkJyk7b2xkUHJv ZmlsZUNhcmRzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkUHJvZmlsZUNhcmRz KTt9CllBSE9PLlNlYXJjaC5BbnN3ZXJzLnVzZXJQcm9maWxlQ2FyZC5pbml0KCk7 fQpmdW5jdGlvbiByZW1vdmVGcm9tKGUsYXJncyl7aWYoYXJnc1swXS5yZW1vdmVk Q29udGFjdCl7aWYoWVVELmlzQW5jZXN0b3IoWVVELmdldCgneWFuLWNvbm5lY3Rp b25zJyksYXJnc1swXS5yZW1vdmVkQ29udGFjdCkpe3ZhciBsaW5rPVlBSE9PLnV0 aWwuSGlzdG9yeS5nZXRRdWVyeVN0cmluZ1BhcmFtZXRlcignbGluaycpO3ZhciBv cmRlcmJ5PVlBSE9PLnV0aWwuSGlzdG9yeS5nZXRRdWVyeVN0cmluZ1BhcmFtZXRl cignb3JkZXJieScpO3ZhciB1c2VyaWQ9WUFIT08udXRpbC5IaXN0b3J5LmdldFF1 ZXJ5U3RyaW5nUGFyYW1ldGVyKCdzaG93Jyk7dmFyIHVyaVBhcmFtcz1bXTtpZihs aW5rIT09bnVsbCl7dXJpUGFyYW1zLnB1c2goJ2xpbms9JytsaW5rKTt9CmlmKG9y ZGVyYnkhPT1udWxsKXt1cmlQYXJhbXMucHVzaCgnb3JkZXJieT0nK29yZGVyYnkp O30KaWYodXNlcmlkIT09bnVsbCl7dXJpUGFyYW1zLnB1c2goJ3Nob3c9Jyt1c2Vy aWQpO30KdmFyIHF1ZXJ5c3RyaW5nPXVyaVBhcmFtcy5sZW5ndGg+PTE/KCc/Jyt1 cmlQYXJhbXMuam9pbignJicpKTonJzt2YXIgdXJsPWxvY2F0aW9uLnBhdGhuYW1l K3F1ZXJ5c3RyaW5nO3ZhciB0cmlnZ2VyPXtlbDp1cmwsZXZlbnRUeXBlOid1cmkn LHNvdXJjZVR5cGU6J2RpcmVjdCcsbWV0aG9kVHlwZTonR0VUJyx0YXJnZXRlbDpZ VUQuZ2V0KCd5YW4tY29ubmVjdGlvbnMnKX07WUFIT08uU2VhcmNoLkFuc3dlcnMu Q29udGVudC5sb2FkZXIucmVnaXN0ZXJUcmlnZ2VyKHRyaWdnZXIpO319fQpyZXR1 cm57aW5pdDpmdW5jdGlvbigpe1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnJlbW92ZUNv bnRhY3Quc3Vic2NyaWJlKHJlbW92ZUZyb20pO1lBSE9PLlNlYXJjaC5BbnN3ZXJz LnJlc2V0TG9hZGVyQW5kQ29udGVudEV2ZW50LnN1YnNjcmliZShyZXNldFByb2Zp bGVDYXJkcyk7fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnRvZGF5VHJhY2s9 ZnVuY3Rpb24oKQp7cmV0dXJue2luaXQ6ZnVuY3Rpb24oKXt2YXIgdG9kYXk9ZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi10b2RheScpO2lmKHRvZGF5KXt2YXIg YW5jaG9ycz10b2RheS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpO1lBSE9PLnV0 aWwuRXZlbnQub24oYW5jaG9ycywnY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciB5bHU9 dGhpcy5ocmVmLm1hdGNoKC9feWx1PVteO10qLylbMF07dmFyIGJlYWNvbj1kb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtiZWFjb24uc3JjPSdodHRwOi8vcy5j YXBpLnlhaG9vLmNvbS9hbnN3ZXJzL2IuZ2lmPycreWx1O2RvY3VtZW50LmJvZHku YXBwZW5kQ2hpbGQoYmVhY29uKTt9KTt9fX19KCk7WUFIT08uU2VhcmNoLkFuc3dl cnMubWFya2V0aW5nQ29kZUNvb2tpZT1mdW5jdGlvbigpCntyZXR1cm57aW5pdDpm dW5jdGlvbigpe2lmKHR5cGVvZiBtYXJrZXRpbmdDb2RlIT0idW5kZWZpbmVkIil7 aWYoWUFIT08udXRpbC5Db29raWUuZ2V0U3VicygiYW5zd2Vycy1zZXNzaW9uIikp e3ZhciBtY29kZT1ZQUhPTy51dGlsLkNvb2tpZS5nZXRTdWJzKCJhbnN3ZXJzLXNl c3Npb24iKS5tY29kZTt9CmlmKCFtY29kZSl7WUFIT08udXRpbC5Db29raWUuc2V0 U3ViKCJhbnN3ZXJzLXNlc3Npb24iLCJtY29kZSIsbWFya2V0aW5nQ29kZSx7ZG9t YWluOiJhbnN3ZXJzLnlhaG9vLmNvbSIscGF0aDoiLyJ9KTt9fX19fSgpO1lBSE9P LlNlYXJjaC5BbnN3ZXJzLm1hcmtldGluZ1ZpZGVvPWZ1bmN0aW9uKCkKe3ZhciBZ VUQ9WUFIT08udXRpbC5Eb20sWVVFPVlBSE9PLnV0aWwuRXZlbnQ7dmFyIGRpdj1m YWxzZSxwYW5lbCx2aWRlb0xpbmssX3BsYXllcixwYW5lbFN0YXRlO2Z1bmN0aW9u IGxvYWRQYW5lbChlKXtZVUUucHJldmVudERlZmF1bHQoZSk7aWYoIWRpdil7ZGl2 PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2Rpdi5pZD1ZQUhPTy5TZWFy Y2guQW5zd2Vycy5jc3MubWFya2V0aW5nVmlkZW8udmlkZW9JZDtkb2N1bWVudC5i b2R5LmFwcGVuZENoaWxkKGRpdik7cGFuZWw9bmV3IFlBSE9PLndpZGdldC5EaWFs b2coZGl2LHttb2RhbDp0cnVlLHZpc2libGU6ZmFsc2UsZml4ZWRjZW50ZXI6dHJ1 ZSxjb25zdHJhaW50b3ZpZXdwb3J0OnRydWUsZHJhZ2dhYmxlOmZhbHNlLGNsb3Nl OnRydWUsdW5kZXJsYXk6J25vbmUnfSk7fQpwYW5lbC5oaWRlRXZlbnQuc3Vic2Ny aWJlKGZ1bmN0aW9uKCl7dmFyIHBvcHVwPVlVRC5nZXQoJ3lhaG9vLXZpZGVvLXBs YXllcicpO3ZhciBzcGxhc2g9WVVELmdldCgndmlkZW8tc3BsYXNoJyk7dmFyIHBh cmVudCxjaGlsZDtpZihzcGxhc2gpe2NoaWxkPXNwbGFzaDtwYXJlbnQ9c3BsYXNo LnBhcmVudE5vZGU7fQplbHNlIGlmKHBvcHVwKXtjaGlsZD1wb3B1cDtwYXJlbnQ9 cG9wdXAucGFyZW50Tm9kZTt9CnZhciB2aWRlbz1kb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKTt2aWRlby5pZD0neWFob28tdmlkZW8tcGxheWVyJztwYXJlbnQu cmVtb3ZlQ2hpbGQoY2hpbGQpO3BhcmVudC5hcHBlbmRDaGlsZCh2aWRlbyk7fSk7 bG9hZFZpZGVvKCk7cGFuZWwuc2hvdygpO30KZnVuY3Rpb24gbG9hZFNwbGFzaCgp e3BhbmVsLnNldEJvZHkoJzxkaXYgaWQ9InZpZGVvLXNwbGFzaCI+PGgzPicrWUFI T08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnZpZGVvRW5kU2NyZWVuLmhlYWRlcisn PC9oMz48dWw+PGxpIGNsYXNzPSJjdGEgZmlyc3QiPjxhIGlkPSJyZWdpc3Rlci1i dG4iIGhyZWY9Ii9qb2luPy5kb25lPScrZW5jb2RlVVJJQ29tcG9uZW50KGRvY3Vt ZW50LmxvY2F0aW9uLmhyZWYpKyciIGNsYXNzPSJzZWFyY2giPjxzcGFuPjxzcGFu PjxzcGFuPjxzcGFuPicrWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnZpZGVv RW5kU2NyZWVuLmJ1dHRvbisnPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPjwv YT48L2xpPjxsaSBjbGFzcz0iY3RhIj48YSBocmVmPSInK3ZpZGVvTGluay5ocmVm KyciIGNsYXNzPSJzZWNvbmRhcnkgeWFuLW1hcmtldGluZy1yZXBsYXkiPjxzcGFu PjxzcGFuPjxzcGFuPjxzcGFuPicrWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxz LnZpZGVvRW5kU2NyZWVuLnBsYXkrJzwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvc3Bh bj48L2E+PC9saT48L3VsPjwvZGl2PicpO3ZhciB2aWRlb1JlcGxheT1ZVUQuZ2V0 RWxlbWVudHNCeUNsYXNzTmFtZSgneWFuLW1hcmtldGluZy1yZXBsYXknLCdhJyxk aXYpWzBdO2lmKHZpZGVvUmVwbGF5KXtZVUUub24odmlkZW9SZXBsYXksJ2NsaWNr JyxmdW5jdGlvbihlKXtZVUUucHJldmVudERlZmF1bHQoZSk7bG9hZFZpZGVvKCk7 fSk7fX0KZnVuY3Rpb24gbG9hZFZpZGVvKCl7aWYodmlkZW9JZCl7cGFuZWwuc2V0 Qm9keSgnPGRpdiBpZD0ieWFob28tdmlkZW8tcGxheWVyIj48L2Rpdj4nKTtwYW5l bC5yZW5kZXIoKTt2YXIgX3BsYXlsaXN0Q29udGVudD1be21lZGlhSWQ6dmlkZW9J ZH1dO3ZhciBfcGxheWVyQ29uZmlnPXtwbGF5ZXJVcmw6J2h0dHA6Ly9kLnlpbWcu Y29tL25sL3ktYW5zd2Vycy9wb3B1cC9wbGF5ZXIuc3dmJyx3aWR0aDonNTEyJyxo ZWlnaHQ6JzMyMicsYXV0b1BsYXk6MX07dmFyIF9ldmVudHNDb25maWc9e29uUGxh eWVyUmVhZHk6ZnVuY3Rpb24oKXtmb3IobWVkaWFJdGVtIGluIF9wbGF5bGlzdENv bnRlbnQpe19wbGF5ZXIuYWRkVG9QbGF5bGlzdChfcGxheWxpc3RDb250ZW50W21l ZGlhSXRlbV0pO319LG9uUGxheWJhY2tDb21wbGV0ZTpsb2FkU3BsYXNofTtfcGxh eWVyPW5ldyBZQUhPTy53aWRnZXQuVmlkZW8oJ3lhaG9vLXZpZGVvLXBsYXllcics X3BsYXllckNvbmZpZyxfZXZlbnRzQ29uZmlnKTtfcGxheWVyLnJlbmRlcigpO319 CnJldHVybntpbml0OmZ1bmN0aW9uKCl7dmFyIG1hcmtldGluZ0Jhcj1ZVUQuZ2V0 KCd5YW4tbWFya2V0aW5nLWJhcicpO2lmKG1hcmtldGluZ0Jhcil7dmlkZW9MaW5r PVlVRC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5YW4tbWFya2V0aW5nLXZpZGVv JywnYScsbWFya2V0aW5nQmFyKVswXTt2aWRlb0lkPXZpZGVvTGluay5ocmVmLm1h dGNoKC8oWzAtOV0qKSQvKVswXTtpZih2aWRlb0lkKXt2YXIgc2NyaXB0Tm9kZT1k b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtzY3JpcHROb2RlLnR5cGU9 J3RleHQvamF2YXNjcmlwdCc7c2NyaXB0Tm9kZS5zcmM9J2h0dHA6Ly9kLnlpbWcu Y29tL25sL3ktYW5zd2Vycy9wb3B1cC9wbGF5ZXIuanMnO21hcmtldGluZ0Jhci5h cHBlbmRDaGlsZChzY3JpcHROb2RlKTt2YXIgY2hlY2tWaWRlb1BvbGw9c2V0SW50 ZXJ2YWwoZnVuY3Rpb24oKXtpZih0eXBlb2YgWUFIT08ud2lkZ2V0LlZpZGVvIT0n dW5kZWZpbmVkJyl7Y2xlYXJJbnRlcnZhbChjaGVja1ZpZGVvUG9sbCk7WVVFLm9u KHZpZGVvTGluaywnY2xpY2snLGxvYWRQYW5lbCk7fQpyZXR1cm47fSwxMDApO30K am9pblVSTD1ZVUQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneWFuLWpvaW4nLCdh JyxtYXJrZXRpbmdCYXIpWzBdO2lmKGpvaW5VUkwpe2pvaW5VUkwuaHJlZj1qb2lu VVJMLmhyZWYrJz8uZG9uZT0nK2VuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5s b2NhdGlvbi5ocmVmKTt9fX19O30oKTtpZih0eXBlb2YgWU9TV0lER0VUUz09InVu ZGVmaW5lZCJ8fCFZT1NXSURHRVRTKXt2YXIgWU9TV0lER0VUUz17fTt9WU9TV0lE R0VUUy5uYW1lc3BhY2U9ZnVuY3Rpb24oKXt2YXIgQT1hcmd1bWVudHMsRT1udWxs LEMsQixEO2ZvcihDPTA7QzxBLmxlbmd0aDtDPUMrMSl7RD0oIiIrQVtDXSkuc3Bs aXQoIi4iKTtFPVlPU1dJREdFVFM7Zm9yKEI9KERbMF09PSJZT1NXSURHRVRTIik/ MTowO0I8RC5sZW5ndGg7Qj1CKzEpe0VbRFtCXV09RVtEW0JdXXx8e307RT1FW0Rb Ql1dO319cmV0dXJuIEU7fTtZT1NXSURHRVRTLmxvZz1mdW5jdGlvbihELEEsQyl7 dmFyIEI9WU9TV0lER0VUUy53aWRnZXQuTG9nZ2VyO2lmKEImJkIubG9nKXtyZXR1 cm4gQi5sb2coRCxBLEMpO31lbHNle3JldHVybiBmYWxzZTt9fTtZT1NXSURHRVRT LnJlZ2lzdGVyPWZ1bmN0aW9uKEEsRSxEKXt2YXIgST1ZT1NXSURHRVRTLmVudi5t b2R1bGVzLEIsSCxHLEYsQztpZighSVtBXSl7SVtBXT17dmVyc2lvbnM6W10sYnVp bGRzOltdfTt9Qj1JW0FdO0g9RC52ZXJzaW9uO0c9RC5idWlsZDtGPVlPU1dJREdF VFMuZW52Lmxpc3RlbmVycztCLm5hbWU9QTtCLnZlcnNpb249SDtCLmJ1aWxkPUc7 Qi52ZXJzaW9ucy5wdXNoKEgpO0IuYnVpbGRzLnB1c2goRyk7Qi5tYWluQ2xhc3M9 RTtmb3IoQz0wO0M8Ri5sZW5ndGg7Qz1DKzEpe0ZbQ10oQik7fWlmKEUpe0UuVkVS U0lPTj1IO0UuQlVJTEQ9Rzt9ZWxzZXtZT1NXSURHRVRTLmxvZygibWFpbkNsYXNz IGlzIHVuZGVmaW5lZCBmb3IgbW9kdWxlICIrQSwid2FybiIpO319O1lPU1dJREdF VFMuZW52PVlPU1dJREdFVFMuZW52fHx7bW9kdWxlczpbXSxsaXN0ZW5lcnM6W119 O1lPU1dJREdFVFMuZW52LmdldFZlcnNpb249ZnVuY3Rpb24oQSl7cmV0dXJuIFlP U1dJREdFVFMuZW52Lm1vZHVsZXNbQV18fG51bGw7fTtZT1NXSURHRVRTLmVudi51 YT1mdW5jdGlvbigpe3ZhciBDPXtpZTowLG9wZXJhOjAsZ2Vja286MCx3ZWJraXQ6 MCxtb2JpbGU6bnVsbCxhaXI6MCxjYWphOjB9LEI9bmF2aWdhdG9yLnVzZXJBZ2Vu dCxBO2lmKCgvS0hUTUwvKS50ZXN0KEIpKXtDLndlYmtpdD0xO31BPUIubWF0Y2go L0FwcGxlV2ViS2l0XC8oW15cc10qKS8pO2lmKEEmJkFbMV0pe0Mud2Via2l0PXBh cnNlRmxvYXQoQVsxXSk7aWYoLyBNb2JpbGVcLy8udGVzdChCKSl7Qy5tb2JpbGU9 IkFwcGxlIjt9ZWxzZXtBPUIubWF0Y2goL05va2lhTlteXC9dKi8pO2lmKEEpe0Mu bW9iaWxlPUFbMF07fX1BPUIubWF0Y2goL0Fkb2JlQUlSXC8oW15cc10qKS8pO2lm KEEpe0MuYWlyPUFbMF07fX1pZighQy53ZWJraXQpe0E9Qi5tYXRjaCgvT3BlcmFb XHNcL10oW15cc10qKS8pO2lmKEEmJkFbMV0pe0Mub3BlcmE9cGFyc2VGbG9hdChB WzFdKTtBPUIubWF0Y2goL09wZXJhIE1pbmlbXjtdKi8pO2lmKEEpe0MubW9iaWxl PUFbMF07fX1lbHNle0E9Qi5tYXRjaCgvTVNJRVxzKFteO10qKS8pO2lmKEEmJkFb MV0pe0MuaWU9cGFyc2VGbG9hdChBWzFdKTt9ZWxzZXtBPUIubWF0Y2goL0dlY2tv XC8oW15cc10qKS8pO2lmKEEpe0MuZ2Vja289MTtBPUIubWF0Y2goL3J2OihbXlxz XCldKikvKTtpZihBJiZBWzFdKXtDLmdlY2tvPXBhcnNlRmxvYXQoQVsxXSk7fX19 fX1BPUIubWF0Y2goL0NhamFcLyhbXlxzXSopLyk7aWYoQSYmQVsxXSl7Qy5jYWph PXBhcnNlRmxvYXQoQVsxXSk7fXJldHVybiBDO30oKTsoZnVuY3Rpb24oKXtZT1NX SURHRVRTLm5hbWVzcGFjZSgidXRpbCIsIndpZGdldCIsImV4YW1wbGUiKTtpZigi dW5kZWZpbmVkIiE9PXR5cGVvZiBZQUhPT19jb25maWcpe3ZhciBCPVlBSE9PX2Nv bmZpZy5saXN0ZW5lcixBPVlPU1dJREdFVFMuZW52Lmxpc3RlbmVycyxEPXRydWUs QztpZihCKXtmb3IoQz0wO0M8QS5sZW5ndGg7Qz1DKzEpe2lmKEFbQ109PUIpe0Q9 ZmFsc2U7YnJlYWs7fX1pZihEKXtBLnB1c2goQik7fX19fSkoKTtZT1NXSURHRVRT Lmxhbmc9WU9TV0lER0VUUy5sYW5nfHx7fTsoZnVuY3Rpb24oKXt2YXIgQj1ZT1NX SURHRVRTLmxhbmcsRj0iW29iamVjdCBBcnJheV0iLEM9IltvYmplY3QgRnVuY3Rp b25dIixBPU9iamVjdC5wcm90b3R5cGUsRT1bInRvU3RyaW5nIiwidmFsdWVPZiJd LEQ9e2lzQXJyYXk6ZnVuY3Rpb24oRyl7cmV0dXJuIEEudG9TdHJpbmcuYXBwbHko Ryk9PT1GO30saXNCb29sZWFuOmZ1bmN0aW9uKEcpe3JldHVybiB0eXBlb2YgRz09 PSJib29sZWFuIjt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oRyl7cmV0dXJuIEEudG9T dHJpbmcuYXBwbHkoRyk9PT1DO30saXNOdWxsOmZ1bmN0aW9uKEcpe3JldHVybiBH PT09bnVsbDt9LGlzTnVtYmVyOmZ1bmN0aW9uKEcpe3JldHVybiB0eXBlb2YgRz09 PSJudW1iZXIiJiZpc0Zpbml0ZShHKTt9LGlzT2JqZWN0OmZ1bmN0aW9uKEcpe3Jl dHVybihHJiYodHlwZW9mIEc9PT0ib2JqZWN0Inx8Qi5pc0Z1bmN0aW9uKEcpKSl8 fGZhbHNlO30saXNTdHJpbmc6ZnVuY3Rpb24oRyl7cmV0dXJuIHR5cGVvZiBHPT09 InN0cmluZyI7fSxpc1VuZGVmaW5lZDpmdW5jdGlvbihHKXtyZXR1cm4gdHlwZW9m IEc9PT0idW5kZWZpbmVkIjt9LF9JRUVudW1GaXg6KFlPU1dJREdFVFMuZW52LnVh LmllKT9mdW5jdGlvbihJLEgpe3ZhciBHLEssSjtmb3IoRz0wO0c8RS5sZW5ndGg7 Rz1HKzEpe0s9RVtHXTtKPUhbS107aWYoQi5pc0Z1bmN0aW9uKEopJiZKIT1BW0td KXtJW0tdPUo7fX19OmZ1bmN0aW9uKCl7fSxleHRlbmQ6ZnVuY3Rpb24oSixLLEkp e2lmKCFLfHwhSil7dGhyb3cgbmV3IEVycm9yKCJleHRlbmQgZmFpbGVkLCBwbGVh c2UgY2hlY2sgdGhhdCAiKyJhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbmNsdWRlZC4i KTt9dmFyIEg9ZnVuY3Rpb24oKXt9LEc7SC5wcm90b3R5cGU9Sy5wcm90b3R5cGU7 Si5wcm90b3R5cGU9bmV3IEgoKTtKLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1KO0ou c3VwZXJjbGFzcz1LLnByb3RvdHlwZTtpZihLLnByb3RvdHlwZS5jb25zdHJ1Y3Rv cj09QS5jb25zdHJ1Y3Rvcil7Sy5wcm90b3R5cGUuY29uc3RydWN0b3I9Szt9aWYo SSl7Zm9yKEcgaW4gSSl7aWYoQi5oYXNPd25Qcm9wZXJ0eShJLEcpKXtKLnByb3Rv dHlwZVtHXT1JW0ddO319Qi5fSUVFbnVtRml4KEoucHJvdG90eXBlLEkpO319LGF1 Z21lbnRPYmplY3Q6ZnVuY3Rpb24oSyxKKXtpZighSnx8IUspe3Rocm93IG5ldyBF cnJvcigiQWJzb3JiIGZhaWxlZCwgdmVyaWZ5IGRlcGVuZGVuY2llcy4iKTt9dmFy IEc9YXJndW1lbnRzLEksTCxIPUdbMl07aWYoSCYmSCE9PXRydWUpe2ZvcihJPTI7 STxHLmxlbmd0aDtJPUkrMSl7S1tHW0ldXT1KW0dbSV1dO319ZWxzZXtmb3IoTCBp biBKKXtpZihIfHwhKEwgaW4gSykpe0tbTF09SltMXTt9fUIuX0lFRW51bUZpeChL LEopO319LGF1Z21lbnRQcm90bzpmdW5jdGlvbihKLEkpe2lmKCFJfHwhSil7dGhy b3cgbmV3IEVycm9yKCJBdWdtZW50IGZhaWxlZCwgdmVyaWZ5IGRlcGVuZGVuY2ll cy4iKTt9dmFyIEc9W0oucHJvdG90eXBlLEkucHJvdG90eXBlXSxIO2ZvcihIPTI7 SDxhcmd1bWVudHMubGVuZ3RoO0g9SCsxKXtHLnB1c2goYXJndW1lbnRzW0hdKTt9 Qi5hdWdtZW50T2JqZWN0LmFwcGx5KHRoaXMsRyk7fSxkdW1wOmZ1bmN0aW9uKEcs TCl7dmFyIEksSyxOPVtdLE89InsuLi59IixIPSJmKCl7Li4ufSIsTT0iLCAiLEo9 IiA9PiAiO2lmKCFCLmlzT2JqZWN0KEcpKXtyZXR1cm4gRysiIjt9ZWxzZXtpZihH IGluc3RhbmNlb2YgRGF0ZXx8KCJub2RlVHlwZSJpbiBHJiYidGFnTmFtZSJpbiBH KSl7cmV0dXJuIEc7fWVsc2V7aWYoQi5pc0Z1bmN0aW9uKEcpKXtyZXR1cm4gSDt9 fX1MPShCLmlzTnVtYmVyKEwpKT9MOjM7aWYoQi5pc0FycmF5KEcpKXtOLnB1c2go IlsiKTtmb3IoST0wLEs9Ry5sZW5ndGg7STxLO0k9SSsxKXtpZihCLmlzT2JqZWN0 KEdbSV0pKXtOLnB1c2goKEw+MCk/Qi5kdW1wKEdbSV0sTC0xKTpPKTt9ZWxzZXtO LnB1c2goR1tJXSk7fU4ucHVzaChNKTt9aWYoTi5sZW5ndGg+MSl7Ti5wb3AoKTt9 Ti5wdXNoKCJdIik7fWVsc2V7Ti5wdXNoKCJ7Iik7Zm9yKEkgaW4gRyl7aWYoQi5o YXNPd25Qcm9wZXJ0eShHLEkpKXtOLnB1c2goSStKKTtpZihCLmlzT2JqZWN0KEdb SV0pKXtOLnB1c2goKEw+MCk/Qi5kdW1wKEdbSV0sTC0xKTpPKTt9ZWxzZXtOLnB1 c2goR1tJXSk7fU4ucHVzaChNKTt9fWlmKE4ubGVuZ3RoPjEpe04ucG9wKCk7fU4u cHVzaCgifSIpO31yZXR1cm4gTi5qb2luKCIiKTt9LHN1YnN0aXR1dGU6ZnVuY3Rp b24oVixILE8pe3ZhciBMLEssSixSLFMsVSxRPVtdLEksTT0iZHVtcCIsUD0iICIs Rz0ieyIsVD0ifSIsTjtmb3IoOzspe0w9Vi5sYXN0SW5kZXhPZihHKTtpZihMPDAp e2JyZWFrO31LPVYuaW5kZXhPZihULEwpO2lmKEwrMT49Syl7YnJlYWs7fUk9Vi5z dWJzdHJpbmcoTCsxLEspO1I9STtVPW51bGw7Sj1SLmluZGV4T2YoUCk7aWYoSj4t MSl7VT1SLnN1YnN0cmluZyhKKzEpO1I9Ui5zdWJzdHJpbmcoMCxKKTt9Uz1IW1Jd O2lmKE8pe1M9TyhSLFMsVSk7fWlmKEIuaXNPYmplY3QoUykpe2lmKEIuaXNBcnJh eShTKSl7Uz1CLmR1bXAoUyxwYXJzZUludChVLDEwKSk7fWVsc2V7VT1VfHwiIjtO PVUuaW5kZXhPZihNKTtpZihOPi0xKXtVPVUuc3Vic3RyaW5nKDQpO31pZihTLnRv U3RyaW5nPT09QS50b1N0cmluZ3x8Tj4tMSl7Uz1CLmR1bXAoUyxwYXJzZUludChV LDEwKSk7fWVsc2V7Uz1TLnRvU3RyaW5nKCk7fX19ZWxzZXtpZighQi5pc1N0cmlu ZyhTKSYmIUIuaXNOdW1iZXIoUykpe1M9In4tIitRLmxlbmd0aCsiLX4iO1FbUS5s ZW5ndGhdPUk7fX1WPVYuc3Vic3RyaW5nKDAsTCkrUytWLnN1YnN0cmluZyhLKzEp O31mb3IoTD1RLmxlbmd0aC0xO0w+PTA7TD1MLTEpe1Y9Vi5yZXBsYWNlKG5ldyBS ZWdFeHAoIn4tIitMKyItfiIpLCJ7IitRW0xdKyJ9IiwiZyIpO31yZXR1cm4gVjt9 LHRyaW06ZnVuY3Rpb24oRyl7dHJ5e3JldHVybiBHLnJlcGxhY2UoL15ccyt8XHMr JC9nLCIiKTt9Y2F0Y2goSCl7cmV0dXJuIEc7fX0sbWVyZ2U6ZnVuY3Rpb24oKXt2 YXIgSj17fSxIPWFyZ3VtZW50cyxHPUgubGVuZ3RoLEk7Zm9yKEk9MDtJPEc7ST1J KzEpe0IuYXVnbWVudE9iamVjdChKLEhbSV0sdHJ1ZSk7fXJldHVybiBKO30sbGF0 ZXI6ZnVuY3Rpb24oTixILE8sSixLKXtOPU58fDA7SD1IfHx7fTt2YXIgST1PLE09 SixMLEc7aWYoQi5pc1N0cmluZyhPKSl7ST1IW09dO31pZighSSl7dGhyb3cgbmV3 IFR5cGVFcnJvcigibWV0aG9kIHVuZGVmaW5lZCIpO31pZighQi5pc0FycmF5KE0p KXtNPVtKXTt9TD1mdW5jdGlvbigpe0kuYXBwbHkoSCxNKTt9O0c9KEspP3NldElu dGVydmFsKEwsTik6c2V0VGltZW91dChMLE4pO3JldHVybntpbnRlcnZhbDpLLGNh bmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuaW50ZXJ2YWwpe2NsZWFySW50ZXJ2YWwo Ryk7fWVsc2V7Y2xlYXJUaW1lb3V0KEcpO319fTt9LGlzVmFsdWU6ZnVuY3Rpb24o Ryl7cmV0dXJuKEIuaXNPYmplY3QoRyl8fEIuaXNTdHJpbmcoRyl8fEIuaXNOdW1i ZXIoRyl8fEIuaXNCb29sZWFuKEcpKTt9fTtCLmhhc093blByb3BlcnR5PShBLmhh c093blByb3BlcnR5KT9mdW5jdGlvbihHLEgpe3JldHVybiBHJiZHLmhhc093blBy b3BlcnR5KEgpO306ZnVuY3Rpb24oRyxIKXtyZXR1cm4hQi5pc1VuZGVmaW5lZChH W0hdKSYmRy5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbSF0hPT1HW0hdO307RC5hdWdt ZW50T2JqZWN0KEIsRCx0cnVlKTtZT1NXSURHRVRTLnV0aWwuTGFuZz1CO0IuYXVn bWVudD1CLmF1Z21lbnRQcm90bztZT1NXSURHRVRTLmF1Z21lbnQ9Qi5hdWdtZW50 UHJvdG87WU9TV0lER0VUUy5leHRlbmQ9Qi5leHRlbmQ7fSkoKTtZT1NXSURHRVRT LnJlZ2lzdGVyKCJ5YWhvbyIsWU9TV0lER0VUUyx7dmVyc2lvbjoiMi43LjAiLGJ1 aWxkOiIxNzk2In0pOyhmdW5jdGlvbigpe1lPU1dJREdFVFMuZW52Ll9pZF9jb3Vu dGVyPVlPU1dJREdFVFMuZW52Ll9pZF9jb3VudGVyfHwwO3ZhciBFPVlPU1dJREdF VFMudXRpbCxMPVlPU1dJREdFVFMubGFuZyxtPVlPU1dJREdFVFMuZW52LnVhLEE9 WU9TV0lER0VUUy5sYW5nLnRyaW0sZD17fSxoPXt9LE49L150KD86YWJsZXxkfGgp JC9pLFg9L2NvbG9yJC9pLEs9d2luZG93LmRvY3VtZW50LFc9Sy5kb2N1bWVudEVs ZW1lbnQsZT0ib3duZXJEb2N1bWVudCIsbj0iZGVmYXVsdFZpZXciLHY9ImRvY3Vt ZW50RWxlbWVudCIsdD0iY29tcGF0TW9kZSIsYj0ib2Zmc2V0TGVmdCIsUD0ib2Zm c2V0VG9wIix1PSJvZmZzZXRQYXJlbnQiLFo9InBhcmVudE5vZGUiLGw9Im5vZGVU eXBlIixDPSJ0YWdOYW1lIixPPSJzY3JvbGxMZWZ0IixpPSJzY3JvbGxUb3AiLFE9 ImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsdz0iZ2V0Q29tcHV0ZWRTdHlsZSIsYT0i Y3VycmVudFN0eWxlIixNPSJDU1MxQ29tcGF0IixjPSJCYWNrQ29tcGF0IixnPSJj bGFzcyIsRj0iY2xhc3NOYW1lIixKPSIiLEI9IiAiLHM9Iig/Ol58XFxzKSIsaz0i KD89IHwkKSIsVT0iZyIscD0icG9zaXRpb24iLGY9ImZpeGVkIixWPSJyZWxhdGl2 ZSIsaj0ibGVmdCIsbz0idG9wIixyPSJtZWRpdW0iLHE9ImJvcmRlckxlZnRXaWR0 aCIsUj0iYm9yZGVyVG9wV2lkdGgiLEQ9bS5vcGVyYSxJPW0ud2Via2l0LEg9bS5n ZWNrbyxUPW0uaWU7RS5Eb209e0NVU1RPTV9BVFRSSUJVVEVTOighVy5oYXNBdHRy aWJ1dGUpP3siZm9yIjoiaHRtbEZvciIsImNsYXNzIjpGfTp7Imh0bWxGb3IiOiJm b3IiLCJjbGFzc05hbWUiOmd9LGdldDpmdW5jdGlvbih5KXt2YXIgQUEsWSx6LHgs RztpZih5KXtpZih5W2xdfHx5Lml0ZW0pe3JldHVybiB5O31pZih0eXBlb2YgeT09 PSJzdHJpbmciKXtBQT15O3k9Sy5nZXRFbGVtZW50QnlJZCh5KTtpZih5JiZ5Lmlk PT09QUEpe3JldHVybiB5O31lbHNle2lmKHkmJksuYWxsKXt5PW51bGw7WT1LLmFs bFtBQV07Zm9yKHg9MCxHPVkubGVuZ3RoO3g8RzsrK3gpe2lmKFlbeF0uaWQ9PT1B QSl7cmV0dXJuIFlbeF07fX19fXJldHVybiB5O31pZih5LkRPTV9FVkVOVFMpe3k9 eS5nZXQoImVsZW1lbnQiKTt9aWYoImxlbmd0aCJpbiB5KXt6PVtdO2Zvcih4PTAs Rz15Lmxlbmd0aDt4PEc7Kyt4KXt6W3oubGVuZ3RoXT1FLkRvbS5nZXQoeVt4XSk7 fXJldHVybiB6O31yZXR1cm4geTt9cmV0dXJuIG51bGw7fSxnZXRDb21wdXRlZFN0 eWxlOmZ1bmN0aW9uKEcsWSl7aWYod2luZG93W3ddKXtyZXR1cm4gR1tlXVtuXVt3 XShHLG51bGwpW1ldO31lbHNle2lmKEdbYV0pe3JldHVybiBFLkRvbS5JRV9Db21w dXRlZFN0eWxlLmdldChHLFkpO319fSxnZXRTdHlsZTpmdW5jdGlvbihHLFkpe3Jl dHVybiBFLkRvbS5iYXRjaChHLEUuRG9tLl9nZXRTdHlsZSxZKTt9LF9nZXRTdHls ZTpmdW5jdGlvbigpe2lmKHdpbmRvd1t3XSl7cmV0dXJuIGZ1bmN0aW9uKEcseSl7 eT0oeT09PSJmbG9hdCIpP3k9ImNzc0Zsb2F0IjpFLkRvbS5fdG9DYW1lbCh5KTt2 YXIgeD1HLnN0eWxlW3ldLFk7aWYoIXgpe1k9R1tlXVtuXVt3XShHLG51bGwpO2lm KFkpe3g9WVt5XTt9fXJldHVybiB4O307fWVsc2V7aWYoV1thXSl7cmV0dXJuIGZ1 bmN0aW9uKEcseSl7dmFyIHg7c3dpdGNoKHkpe2Nhc2Uib3BhY2l0eSI6eD0xMDA7 dHJ5e3g9Ry5maWx0ZXJzWyJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBo YSJdLm9wYWNpdHk7fWNhdGNoKHope3RyeXt4PUcuZmlsdGVycygiYWxwaGEiKS5v cGFjaXR5O31jYXRjaChZKXt9fXJldHVybiB4LzEwMDtjYXNlImZsb2F0Ijp5PSJz dHlsZUZsb2F0IjtkZWZhdWx0Onk9RS5Eb20uX3RvQ2FtZWwoeSk7eD1HW2FdP0db YV1beV06bnVsbDtyZXR1cm4oRy5zdHlsZVt5XXx8eCk7fX07fX19KCksc2V0U3R5 bGU6ZnVuY3Rpb24oRyxZLHgpe0UuRG9tLmJhdGNoKEcsRS5Eb20uX3NldFN0eWxl LHtwcm9wOlksdmFsOnh9KTt9LF9zZXRTdHlsZTpmdW5jdGlvbigpe2lmKFQpe3Jl dHVybiBmdW5jdGlvbihZLEcpe3ZhciB4PUUuRG9tLl90b0NhbWVsKEcucHJvcCks eT1HLnZhbDtpZihZKXtzd2l0Y2goeCl7Y2FzZSJvcGFjaXR5IjppZihMLmlzU3Ry aW5nKFkuc3R5bGUuZmlsdGVyKSl7WS5zdHlsZS5maWx0ZXI9ImFscGhhKG9wYWNp dHk9Iit5KjEwMCsiKSI7aWYoIVlbYV18fCFZW2FdLmhhc0xheW91dCl7WS5zdHls ZS56b29tPTE7fX1icmVhaztjYXNlImZsb2F0Ijp4PSJzdHlsZUZsb2F0IjtkZWZh dWx0Olkuc3R5bGVbeF09eTt9fWVsc2V7fX07fWVsc2V7cmV0dXJuIGZ1bmN0aW9u KFksRyl7dmFyIHg9RS5Eb20uX3RvQ2FtZWwoRy5wcm9wKSx5PUcudmFsO2lmKFkp e2lmKHg9PSJmbG9hdCIpe3g9ImNzc0Zsb2F0Ijt9WS5zdHlsZVt4XT15O31lbHNl e319O319KCksZ2V0WFk6ZnVuY3Rpb24oRyl7cmV0dXJuIEUuRG9tLmJhdGNoKEcs RS5Eb20uX2dldFhZKTt9LF9jYW5Qb3NpdGlvbjpmdW5jdGlvbihHKXtyZXR1cm4o RS5Eb20uX2dldFN0eWxlKEcsImRpc3BsYXkiKSE9PSJub25lIiYmRS5Eb20uX2lu RG9jKEcpKTt9LF9nZXRYWTpmdW5jdGlvbigpe2lmKEtbdl1bUV0pe3JldHVybiBm dW5jdGlvbih5KXt2YXIgeixZLEFBLEFGLEFFLEFELEFDLEcseCxBQj1NYXRoLmZs b29yLEFHPWZhbHNlO2lmKEUuRG9tLl9jYW5Qb3NpdGlvbih5KSl7QUE9eVtRXSgp O0FGPXlbZV07ej1FLkRvbS5nZXREb2N1bWVudFNjcm9sbExlZnQoQUYpO1k9RS5E b20uZ2V0RG9jdW1lbnRTY3JvbGxUb3AoQUYpO0FHPVtBQihBQVtqXSksQUIoQUFb b10pXTtpZihUJiZtLmllPDgpe0FFPTI7QUQ9MjtBQz1BRlt0XTtHPVMoQUZbdl0s cSk7eD1TKEFGW3ZdLFIpO2lmKG0uaWU9PT02KXtpZihBQyE9PWMpe0FFPTA7QUQ9 MDt9fWlmKChBQz09Yykpe2lmKEchPT1yKXtBRT1wYXJzZUludChHLDEwKTt9aWYo eCE9PXIpe0FEPXBhcnNlSW50KHgsMTApO319QUdbMF0tPUFFO0FHWzFdLT1BRDt9 aWYoKFl8fHopKXtBR1swXSs9ejtBR1sxXSs9WTt9QUdbMF09QUIoQUdbMF0pO0FH WzFdPUFCKEFHWzFdKTt9ZWxzZXt9cmV0dXJuIEFHO307fWVsc2V7cmV0dXJuIGZ1 bmN0aW9uKHkpe3ZhciB4LFksQUEsQUIsQUMsej1mYWxzZSxHPXk7aWYoRS5Eb20u X2NhblBvc2l0aW9uKHkpKXt6PVt5W2JdLHlbUF1dO3g9RS5Eb20uZ2V0RG9jdW1l bnRTY3JvbGxMZWZ0KHlbZV0pO1k9RS5Eb20uZ2V0RG9jdW1lbnRTY3JvbGxUb3Ao eVtlXSk7QUM9KChIfHxtLndlYmtpdD41MTkpP3RydWU6ZmFsc2UpO3doaWxlKChH PUdbdV0pKXt6WzBdKz1HW2JdO3pbMV0rPUdbUF07aWYoQUMpe3o9RS5Eb20uX2Nh bGNCb3JkZXJzKEcseik7fX1pZihFLkRvbS5fZ2V0U3R5bGUoeSxwKSE9PWYpe0c9 eTt3aGlsZSgoRz1HW1pdKSYmR1tDXSl7QUE9R1tpXTtBQj1HW09dO2lmKEgmJihF LkRvbS5fZ2V0U3R5bGUoRywib3ZlcmZsb3ciKSE9PSJ2aXNpYmxlIikpe3o9RS5E b20uX2NhbGNCb3JkZXJzKEcseik7fWlmKEFBfHxBQil7elswXS09QUI7elsxXS09 QUE7fX16WzBdKz14O3pbMV0rPVk7fWVsc2V7aWYoRCl7elswXS09eDt6WzFdLT1Z O31lbHNle2lmKEl8fEgpe3pbMF0rPXg7elsxXSs9WTt9fX16WzBdPU1hdGguZmxv b3IoelswXSk7elsxXT1NYXRoLmZsb29yKHpbMV0pO31lbHNle31yZXR1cm4gejt9 O319KCksZ2V0WDpmdW5jdGlvbihHKXt2YXIgWT1mdW5jdGlvbih4KXtyZXR1cm4g RS5Eb20uZ2V0WFkoeClbMF07fTtyZXR1cm4gRS5Eb20uYmF0Y2goRyxZLEUuRG9t LHRydWUpO30sZ2V0WTpmdW5jdGlvbihHKXt2YXIgWT1mdW5jdGlvbih4KXtyZXR1 cm4gRS5Eb20uZ2V0WFkoeClbMV07fTtyZXR1cm4gRS5Eb20uYmF0Y2goRyxZLEUu RG9tLHRydWUpO30sc2V0WFk6ZnVuY3Rpb24oRyx4LFkpe0UuRG9tLmJhdGNoKEcs RS5Eb20uX3NldFhZLHtwb3M6eCxub1JldHJ5Oll9KTt9LF9zZXRYWTpmdW5jdGlv bihHLHope3ZhciBBQT1FLkRvbS5fZ2V0U3R5bGUoRyxwKSx5PUUuRG9tLnNldFN0 eWxlLEFEPXoucG9zLFk9ei5ub1JldHJ5LEFCPVtwYXJzZUludChFLkRvbS5nZXRD b21wdXRlZFN0eWxlKEcsaiksMTApLHBhcnNlSW50KEUuRG9tLmdldENvbXB1dGVk U3R5bGUoRyxvKSwxMCldLEFDLHg7aWYoQUE9PSJzdGF0aWMiKXtBQT1WO3koRyxw LEFBKTt9QUM9RS5Eb20uX2dldFhZKEcpO2lmKCFBRHx8QUM9PT1mYWxzZSl7cmV0 dXJuIGZhbHNlO31pZihpc05hTihBQlswXSkpe0FCWzBdPShBQT09Vik/MDpHW2Jd O31pZihpc05hTihBQlsxXSkpe0FCWzFdPShBQT09Vik/MDpHW1BdO31pZihBRFsw XSE9PW51bGwpe3koRyxqLEFEWzBdLUFDWzBdK0FCWzBdKyJweCIpO31pZihBRFsx XSE9PW51bGwpe3koRyxvLEFEWzFdLUFDWzFdK0FCWzFdKyJweCIpO31pZighWSl7 eD1FLkRvbS5fZ2V0WFkoRyk7aWYoKEFEWzBdIT09bnVsbCYmeFswXSE9QURbMF0p fHwoQURbMV0hPT1udWxsJiZ4WzFdIT1BRFsxXSkpe0UuRG9tLl9zZXRYWShHLHtw b3M6QUQsbm9SZXRyeTp0cnVlfSk7fX19LHNldFg6ZnVuY3Rpb24oWSxHKXtFLkRv bS5zZXRYWShZLFtHLG51bGxdKTt9LHNldFk6ZnVuY3Rpb24oRyxZKXtFLkRvbS5z ZXRYWShHLFtudWxsLFldKTt9LGdldFJlZ2lvbjpmdW5jdGlvbihHKXt2YXIgWT1m dW5jdGlvbih4KXt2YXIgeT1mYWxzZTtpZihFLkRvbS5fY2FuUG9zaXRpb24oeCkp e3k9RS5SZWdpb24uZ2V0UmVnaW9uKHgpO31lbHNle31yZXR1cm4geTt9O3JldHVy biBFLkRvbS5iYXRjaChHLFksRS5Eb20sdHJ1ZSk7fSxnZXRDbGllbnRXaWR0aDpm dW5jdGlvbigpe3JldHVybiBFLkRvbS5nZXRWaWV3cG9ydFdpZHRoKCk7fSxnZXRD bGllbnRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5Eb20uZ2V0Vmlld3BvcnRI ZWlnaHQoKTt9LGdldEVsZW1lbnRzQnlDbGFzc05hbWU6ZnVuY3Rpb24oQUIsQUYs QUMsQUUseCxBRCl7QUI9TC50cmltKEFCKTtBRj1BRnx8IioiO0FDPShBQyk/RS5E b20uZ2V0KEFDKTpudWxsfHxLO2lmKCFBQyl7cmV0dXJuW107fXZhciBZPVtdLEc9 QUMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQUYpLHo9RS5Eb20uaGFzQ2xhc3M7Zm9y KHZhciB5PTAsQUE9Ry5sZW5ndGg7eTxBQTsrK3kpe2lmKHooR1t5XSxBQikpe1lb WS5sZW5ndGhdPUdbeV07fX1pZihBRSl7RS5Eb20uYmF0Y2goWSxBRSx4LEFEKTt9 cmV0dXJuIFk7fSxoYXNDbGFzczpmdW5jdGlvbihZLEcpe3JldHVybiBFLkRvbS5i YXRjaChZLEUuRG9tLl9oYXNDbGFzcyxHKTt9LF9oYXNDbGFzczpmdW5jdGlvbih4 LFkpe3ZhciBHPWZhbHNlLHk7aWYoeCYmWSl7eT1FLkRvbS5nZXRBdHRyaWJ1dGUo eCxGKXx8SjtpZihZLmV4ZWMpe0c9WS50ZXN0KHkpO31lbHNle0c9WSYmKEIreStC KS5pbmRleE9mKEIrWStCKT4tMTt9fWVsc2V7fXJldHVybiBHO30sYWRkQ2xhc3M6 ZnVuY3Rpb24oWSxHKXtyZXR1cm4gRS5Eb20uYmF0Y2goWSxFLkRvbS5fYWRkQ2xh c3MsRyk7fSxfYWRkQ2xhc3M6ZnVuY3Rpb24oeCxZKXt2YXIgRz1mYWxzZSx5O2lm KHgmJlkpe3k9RS5Eb20uZ2V0QXR0cmlidXRlKHgsRil8fEo7aWYoIUUuRG9tLl9o YXNDbGFzcyh4LFkpKXtFLkRvbS5zZXRBdHRyaWJ1dGUoeCxGLEEoeStCK1kpKTtH PXRydWU7fX1lbHNle31yZXR1cm4gRzt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKFks Ryl7cmV0dXJuIEUuRG9tLmJhdGNoKFksRS5Eb20uX3JlbW92ZUNsYXNzLEcpO30s X3JlbW92ZUNsYXNzOmZ1bmN0aW9uKHkseCl7dmFyIFk9ZmFsc2UsQUEseixHO2lm KHkmJngpe0FBPUUuRG9tLmdldEF0dHJpYnV0ZSh5LEYpfHxKO0UuRG9tLnNldEF0 dHJpYnV0ZSh5LEYsQUEucmVwbGFjZShFLkRvbS5fZ2V0Q2xhc3NSZWdleCh4KSxK KSk7ej1FLkRvbS5nZXRBdHRyaWJ1dGUoeSxGKTtpZihBQSE9PXope0UuRG9tLnNl dEF0dHJpYnV0ZSh5LEYsQSh6KSk7WT10cnVlO2lmKEUuRG9tLmdldEF0dHJpYnV0 ZSh5LEYpPT09IiIpe0c9KHkuaGFzQXR0cmlidXRlJiZ5Lmhhc0F0dHJpYnV0ZShn KSk/ZzpGO3kucmVtb3ZlQXR0cmlidXRlKEcpO319fWVsc2V7fXJldHVybiBZO30s cmVwbGFjZUNsYXNzOmZ1bmN0aW9uKHgsWSxHKXtyZXR1cm4gRS5Eb20uYmF0Y2go eCxFLkRvbS5fcmVwbGFjZUNsYXNzLHtmcm9tOlksdG86R30pO30sX3JlcGxhY2VD bGFzczpmdW5jdGlvbih5LHgpe3ZhciBZLEFCLEFBLEc9ZmFsc2UsejtpZih5JiZ4 KXtBQj14LmZyb207QUE9eC50bztpZighQUEpe0c9ZmFsc2U7fWVsc2V7aWYoIUFC KXtHPUUuRG9tLl9hZGRDbGFzcyh5LHgudG8pO31lbHNle2lmKEFCIT09QUEpe3o9 RS5Eb20uZ2V0QXR0cmlidXRlKHksRil8fEo7WT0oQit6LnJlcGxhY2UoRS5Eb20u X2dldENsYXNzUmVnZXgoQUIpLEIrQUEpKS5zcGxpdChFLkRvbS5fZ2V0Q2xhc3NS ZWdleChBQSkpO1kuc3BsaWNlKDEsMCxCK0FBKTtFLkRvbS5zZXRBdHRyaWJ1dGUo eSxGLEEoWS5qb2luKEopKSk7Rz10cnVlO319fX1lbHNle31yZXR1cm4gRzt9LGdl bmVyYXRlSWQ6ZnVuY3Rpb24oRyx4KXt4PXh8fCJ5dWktZ2VuIjt2YXIgWT1mdW5j dGlvbih5KXtpZih5JiZ5LmlkKXtyZXR1cm4geS5pZDt9dmFyIHo9eCtZT1NXSURH RVRTLmVudi5faWRfY291bnRlcisrO2lmKHkpe2lmKHlbZV0uZ2V0RWxlbWVudEJ5 SWQoeikpe3JldHVybiBFLkRvbS5nZW5lcmF0ZUlkKHkseit4KTt9eS5pZD16O31y ZXR1cm4gejt9O3JldHVybiBFLkRvbS5iYXRjaChHLFksRS5Eb20sdHJ1ZSl8fFku YXBwbHkoRS5Eb20sYXJndW1lbnRzKTt9LGlzQW5jZXN0b3I6ZnVuY3Rpb24oWSx4 KXtZPUUuRG9tLmdldChZKTt4PUUuRG9tLmdldCh4KTt2YXIgRz1mYWxzZTtpZigo WSYmeCkmJihZW2xdJiZ4W2xdKSl7aWYoWS5jb250YWlucyYmWSE9PXgpe0c9WS5j b250YWlucyh4KTt9ZWxzZXtpZihZLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtH PSEhKFkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oeCkmMTYpO319fWVsc2V7fXJl dHVybiBHO30saW5Eb2N1bWVudDpmdW5jdGlvbihHLFkpe3JldHVybiBFLkRvbS5f aW5Eb2MoRS5Eb20uZ2V0KEcpLFkpO30sX2luRG9jOmZ1bmN0aW9uKFkseCl7dmFy IEc9ZmFsc2U7aWYoWSYmWVtDXSl7eD14fHxZW2VdO0c9RS5Eb20uaXNBbmNlc3Rv cih4W3ZdLFkpO31lbHNle31yZXR1cm4gRzt9LGdldEVsZW1lbnRzQnk6ZnVuY3Rp b24oWSxBRixBQixBRCx5LEFDLEFFKXtBRj1BRnx8IioiO0FCPShBQik/RS5Eb20u Z2V0KEFCKTpudWxsfHxLO2lmKCFBQil7cmV0dXJuW107fXZhciB4PVtdLEc9QUIu Z2V0RWxlbWVudHNCeVRhZ05hbWUoQUYpO2Zvcih2YXIgej0wLEFBPUcubGVuZ3Ro O3o8QUE7Kyt6KXtpZihZKEdbel0pKXtpZihBRSl7eD1HW3pdO2JyZWFrO31lbHNl e3hbeC5sZW5ndGhdPUdbel07fX19aWYoQUQpe0UuRG9tLmJhdGNoKHgsQUQseSxB Qyk7fXJldHVybiB4O30sZ2V0RWxlbWVudEJ5OmZ1bmN0aW9uKHgsRyxZKXtyZXR1 cm4gRS5Eb20uZ2V0RWxlbWVudHNCeSh4LEcsWSxudWxsLG51bGwsbnVsbCx0cnVl KTt9LGJhdGNoOmZ1bmN0aW9uKHgsQUIsQUEseil7dmFyIHk9W10sWT0oeik/QUE6 d2luZG93O3g9KHgmJih4W0NdfHx4Lml0ZW0pKT94OkUuRG9tLmdldCh4KTtpZih4 JiZBQil7aWYoeFtDXXx8eC5sZW5ndGg9PT11bmRlZmluZWQpe3JldHVybiBBQi5j YWxsKFkseCxBQSk7fWZvcih2YXIgRz0wO0c8eC5sZW5ndGg7KytHKXt5W3kubGVu Z3RoXT1BQi5jYWxsKFkseFtHXSxBQSk7fX1lbHNle3JldHVybiBmYWxzZTt9cmV0 dXJuIHk7fSxnZXREb2N1bWVudEhlaWdodDpmdW5jdGlvbigpe3ZhciBZPShLW3Rd IT1NfHxJKT9LLmJvZHkuc2Nyb2xsSGVpZ2h0Olcuc2Nyb2xsSGVpZ2h0LEc9TWF0 aC5tYXgoWSxFLkRvbS5nZXRWaWV3cG9ydEhlaWdodCgpKTtyZXR1cm4gRzt9LGdl dERvY3VtZW50V2lkdGg6ZnVuY3Rpb24oKXt2YXIgWT0oS1t0XSE9TXx8SSk/Sy5i b2R5LnNjcm9sbFdpZHRoOlcuc2Nyb2xsV2lkdGgsRz1NYXRoLm1heChZLEUuRG9t LmdldFZpZXdwb3J0V2lkdGgoKSk7cmV0dXJuIEc7fSxnZXRWaWV3cG9ydEhlaWdo dDpmdW5jdGlvbigpe3ZhciBHPXNlbGYuaW5uZXJIZWlnaHQsWT1LW3RdO2lmKChZ fHxUKSYmIUQpe0c9KFk9PU0pP1cuY2xpZW50SGVpZ2h0OksuYm9keS5jbGllbnRI ZWlnaHQ7fXJldHVybiBHO30sZ2V0Vmlld3BvcnRXaWR0aDpmdW5jdGlvbigpe3Zh ciBHPXNlbGYuaW5uZXJXaWR0aCxZPUtbdF07aWYoWXx8VCl7Rz0oWT09TSk/Vy5j bGllbnRXaWR0aDpLLmJvZHkuY2xpZW50V2lkdGg7fXJldHVybiBHO30sZ2V0QW5j ZXN0b3JCeTpmdW5jdGlvbihHLFkpe3doaWxlKChHPUdbWl0pKXtpZihFLkRvbS5f dGVzdEVsZW1lbnQoRyxZKSl7cmV0dXJuIEc7fX1yZXR1cm4gbnVsbDt9LGdldEFu Y2VzdG9yQnlDbGFzc05hbWU6ZnVuY3Rpb24oWSxHKXtZPUUuRG9tLmdldChZKTtp ZighWSl7cmV0dXJuIG51bGw7fXZhciB4PWZ1bmN0aW9uKHkpe3JldHVybiBFLkRv bS5oYXNDbGFzcyh5LEcpO307cmV0dXJuIEUuRG9tLmdldEFuY2VzdG9yQnkoWSx4 KTt9LGdldEFuY2VzdG9yQnlUYWdOYW1lOmZ1bmN0aW9uKFksRyl7WT1FLkRvbS5n ZXQoWSk7aWYoIVkpe3JldHVybiBudWxsO312YXIgeD1mdW5jdGlvbih5KXtyZXR1 cm4geVtDXSYmeVtDXS50b1VwcGVyQ2FzZSgpPT1HLnRvVXBwZXJDYXNlKCk7fTty ZXR1cm4gRS5Eb20uZ2V0QW5jZXN0b3JCeShZLHgpO30sZ2V0UHJldmlvdXNTaWJs aW5nQnk6ZnVuY3Rpb24oRyxZKXt3aGlsZShHKXtHPUcucHJldmlvdXNTaWJsaW5n O2lmKEUuRG9tLl90ZXN0RWxlbWVudChHLFkpKXtyZXR1cm4gRzt9fXJldHVybiBu dWxsO30sZ2V0UHJldmlvdXNTaWJsaW5nOmZ1bmN0aW9uKEcpe0c9RS5Eb20uZ2V0 KEcpO2lmKCFHKXtyZXR1cm4gbnVsbDt9cmV0dXJuIEUuRG9tLmdldFByZXZpb3Vz U2libGluZ0J5KEcpO30sZ2V0TmV4dFNpYmxpbmdCeTpmdW5jdGlvbihHLFkpe3do aWxlKEcpe0c9Ry5uZXh0U2libGluZztpZihFLkRvbS5fdGVzdEVsZW1lbnQoRyxZ KSl7cmV0dXJuIEc7fX1yZXR1cm4gbnVsbDt9LGdldE5leHRTaWJsaW5nOmZ1bmN0 aW9uKEcpe0c9RS5Eb20uZ2V0KEcpO2lmKCFHKXtyZXR1cm4gbnVsbDt9cmV0dXJu IEUuRG9tLmdldE5leHRTaWJsaW5nQnkoRyk7fSxnZXRGaXJzdENoaWxkQnk6ZnVu Y3Rpb24oRyx4KXt2YXIgWT0oRS5Eb20uX3Rlc3RFbGVtZW50KEcuZmlyc3RDaGls ZCx4KSk/Ry5maXJzdENoaWxkOm51bGw7cmV0dXJuIFl8fEUuRG9tLmdldE5leHRT aWJsaW5nQnkoRy5maXJzdENoaWxkLHgpO30sZ2V0Rmlyc3RDaGlsZDpmdW5jdGlv bihHLFkpe0c9RS5Eb20uZ2V0KEcpO2lmKCFHKXtyZXR1cm4gbnVsbDt9cmV0dXJu IEUuRG9tLmdldEZpcnN0Q2hpbGRCeShHKTt9LGdldExhc3RDaGlsZEJ5OmZ1bmN0 aW9uKEcseCl7aWYoIUcpe3JldHVybiBudWxsO312YXIgWT0oRS5Eb20uX3Rlc3RF bGVtZW50KEcubGFzdENoaWxkLHgpKT9HLmxhc3RDaGlsZDpudWxsO3JldHVybiBZ fHxFLkRvbS5nZXRQcmV2aW91c1NpYmxpbmdCeShHLmxhc3RDaGlsZCx4KTt9LGdl dExhc3RDaGlsZDpmdW5jdGlvbihHKXtHPUUuRG9tLmdldChHKTtyZXR1cm4gRS5E b20uZ2V0TGFzdENoaWxkQnkoRyk7fSxnZXRDaGlsZHJlbkJ5OmZ1bmN0aW9uKFks eSl7dmFyIHg9RS5Eb20uZ2V0Rmlyc3RDaGlsZEJ5KFkseSksRz14P1t4XTpbXTtF LkRvbS5nZXROZXh0U2libGluZ0J5KHgsZnVuY3Rpb24oeil7aWYoIXl8fHkoeikp e0dbRy5sZW5ndGhdPXo7fXJldHVybiBmYWxzZTt9KTtyZXR1cm4gRzt9LGdldENo aWxkcmVuOmZ1bmN0aW9uKEcpe0c9RS5Eb20uZ2V0KEcpO2lmKCFHKXt9cmV0dXJu IEUuRG9tLmdldENoaWxkcmVuQnkoRyk7fSxnZXREb2N1bWVudFNjcm9sbExlZnQ6 ZnVuY3Rpb24oRyl7Rz1HfHxLO3JldHVybiBNYXRoLm1heChHW3ZdLnNjcm9sbExl ZnQsRy5ib2R5LnNjcm9sbExlZnQpO30sZ2V0RG9jdW1lbnRTY3JvbGxUb3A6ZnVu Y3Rpb24oRyl7Rz1HfHxLO3JldHVybiBNYXRoLm1heChHW3ZdLnNjcm9sbFRvcCxH LmJvZHkuc2Nyb2xsVG9wKTt9LGluc2VydEJlZm9yZTpmdW5jdGlvbihZLEcpe1k9 RS5Eb20uZ2V0KFkpO0c9RS5Eb20uZ2V0KEcpO2lmKCFZfHwhR3x8IUdbWl0pe3Jl dHVybiBudWxsO31yZXR1cm4gR1taXS5pbnNlcnRCZWZvcmUoWSxHKTt9LGluc2Vy dEFmdGVyOmZ1bmN0aW9uKFksRyl7WT1FLkRvbS5nZXQoWSk7Rz1FLkRvbS5nZXQo Ryk7aWYoIVl8fCFHfHwhR1taXSl7cmV0dXJuIG51bGw7fWlmKEcubmV4dFNpYmxp bmcpe3JldHVybiBHW1pdLmluc2VydEJlZm9yZShZLEcubmV4dFNpYmxpbmcpO31l bHNle3JldHVybiBHW1pdLmFwcGVuZENoaWxkKFkpO319LGdldENsaWVudFJlZ2lv bjpmdW5jdGlvbigpe3ZhciB4PUUuRG9tLmdldERvY3VtZW50U2Nyb2xsVG9wKCks WT1FLkRvbS5nZXREb2N1bWVudFNjcm9sbExlZnQoKSx5PUUuRG9tLmdldFZpZXdw b3J0V2lkdGgoKStZLEc9RS5Eb20uZ2V0Vmlld3BvcnRIZWlnaHQoKSt4O3JldHVy biBuZXcgRS5SZWdpb24oeCx5LEcsWSk7fSxzZXRBdHRyaWJ1dGU6ZnVuY3Rpb24o WSxHLHgpe0c9RS5Eb20uQ1VTVE9NX0FUVFJJQlVURVNbR118fEc7WS5zZXRBdHRy aWJ1dGUoRyx4KTt9LGdldEF0dHJpYnV0ZTpmdW5jdGlvbihZLEcpe0c9RS5Eb20u Q1VTVE9NX0FUVFJJQlVURVNbR118fEc7cmV0dXJuIFkuZ2V0QXR0cmlidXRlKEcp O30sX3RvQ2FtZWw6ZnVuY3Rpb24oWSl7dmFyIHg9ZDtmdW5jdGlvbiBHKHkseil7 cmV0dXJuIHoudG9VcHBlckNhc2UoKTt9cmV0dXJuIHhbWV18fCh4W1ldPVkuaW5k ZXhPZigiLSIpPT09LTE/WTpZLnJlcGxhY2UoLy0oW2Etel0pL2dpLEcpKTt9LF9n ZXRDbGFzc1JlZ2V4OmZ1bmN0aW9uKFkpe3ZhciBHO2lmKFkhPT11bmRlZmluZWQp e2lmKFkuZXhlYyl7Rz1ZO31lbHNle0c9aFtZXTtpZighRyl7WT1ZLnJlcGxhY2Uo RS5Eb20uX3BhdHRlcm5zLkNMQVNTX1JFX1RPS0VOUywiXFwkMSIpO0c9aFtZXT1u ZXcgUmVnRXhwKHMrWStrLFUpO319fXJldHVybiBHO30sX3BhdHRlcm5zOntST09U X1RBRzovXmJvZHl8aHRtbCQvaSxDTEFTU19SRV9UT0tFTlM6LyhbXC5cKFwpXF5c JFwqXCtcP1x8XFtcXVx7XH1dKS9nfSxfdGVzdEVsZW1lbnQ6ZnVuY3Rpb24oRyxZ KXtyZXR1cm4gRyYmR1tsXT09MSYmKCFZfHxZKEcpKTt9LF9jYWxjQm9yZGVyczpm dW5jdGlvbih4LHkpe3ZhciBZPXBhcnNlSW50KEUuRG9tW3ddKHgsUiksMTApfHww LEc9cGFyc2VJbnQoRS5Eb21bd10oeCxxKSwxMCl8fDA7aWYoSCl7aWYoTi50ZXN0 KHhbQ10pKXtZPTA7Rz0wO319eVswXSs9Rzt5WzFdKz1ZO3JldHVybiB5O319O3Zh ciBTPUUuRG9tW3ddO2lmKG0ub3BlcmEpe0UuRG9tW3ddPWZ1bmN0aW9uKFksRyl7 dmFyIHg9UyhZLEcpO2lmKFgudGVzdChHKSl7eD1FLkRvbS5Db2xvci50b1JHQih4 KTt9cmV0dXJuIHg7fTt9aWYobS53ZWJraXQpe0UuRG9tW3ddPWZ1bmN0aW9uKFks Ryl7dmFyIHg9UyhZLEcpO2lmKHg9PT0icmdiYSgwLCAwLCAwLCAwKSIpe3g9InRy YW5zcGFyZW50Ijt9cmV0dXJuIHg7fTt9fSkoKTtZT1NXSURHRVRTLnV0aWwuUmVn aW9uPWZ1bmN0aW9uKEMsRCxBLEIpe3RoaXMudG9wPUM7dGhpcy55PUM7dGhpc1sx XT1DO3RoaXMucmlnaHQ9RDt0aGlzLmJvdHRvbT1BO3RoaXMubGVmdD1CO3RoaXMu eD1CO3RoaXNbMF09Qjt0aGlzLndpZHRoPXRoaXMucmlnaHQtdGhpcy5sZWZ0O3Ro aXMuaGVpZ2h0PXRoaXMuYm90dG9tLXRoaXMudG9wO307WU9TV0lER0VUUy51dGls LlJlZ2lvbi5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oQSl7cmV0dXJuKEEu bGVmdD49dGhpcy5sZWZ0JiZBLnJpZ2h0PD10aGlzLnJpZ2h0JiZBLnRvcD49dGhp cy50b3AmJkEuYm90dG9tPD10aGlzLmJvdHRvbSk7fTtZT1NXSURHRVRTLnV0aWwu UmVnaW9uLnByb3RvdHlwZS5nZXRBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuKCh0aGlz LmJvdHRvbS10aGlzLnRvcCkqKHRoaXMucmlnaHQtdGhpcy5sZWZ0KSk7fTtZT1NX SURHRVRTLnV0aWwuUmVnaW9uLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24o RSl7dmFyIEM9TWF0aC5tYXgodGhpcy50b3AsRS50b3ApLEQ9TWF0aC5taW4odGhp cy5yaWdodCxFLnJpZ2h0KSxBPU1hdGgubWluKHRoaXMuYm90dG9tLEUuYm90dG9t KSxCPU1hdGgubWF4KHRoaXMubGVmdCxFLmxlZnQpO2lmKEE+PUMmJkQ+PUIpe3Jl dHVybiBuZXcgWU9TV0lER0VUUy51dGlsLlJlZ2lvbihDLEQsQSxCKTt9ZWxzZXty ZXR1cm4gbnVsbDt9fTtZT1NXSURHRVRTLnV0aWwuUmVnaW9uLnByb3RvdHlwZS51 bmlvbj1mdW5jdGlvbihFKXt2YXIgQz1NYXRoLm1pbih0aGlzLnRvcCxFLnRvcCks RD1NYXRoLm1heCh0aGlzLnJpZ2h0LEUucmlnaHQpLEE9TWF0aC5tYXgodGhpcy5i b3R0b20sRS5ib3R0b20pLEI9TWF0aC5taW4odGhpcy5sZWZ0LEUubGVmdCk7cmV0 dXJuIG5ldyBZT1NXSURHRVRTLnV0aWwuUmVnaW9uKEMsRCxBLEIpO307WU9TV0lE R0VUUy51dGlsLlJlZ2lvbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXty ZXR1cm4oIlJlZ2lvbiB7IisidG9wOiAiK3RoaXMudG9wKyIsIHJpZ2h0OiAiK3Ro aXMucmlnaHQrIiwgYm90dG9tOiAiK3RoaXMuYm90dG9tKyIsIGxlZnQ6ICIrdGhp cy5sZWZ0KyIsIGhlaWdodDogIit0aGlzLmhlaWdodCsiLCB3aWR0aDogIit0aGlz LndpZHRoKyJ9Iik7fTtZT1NXSURHRVRTLnV0aWwuUmVnaW9uLmdldFJlZ2lvbj1m dW5jdGlvbihEKXt2YXIgRj1ZT1NXSURHRVRTLnV0aWwuRG9tLmdldFhZKEQpLEM9 RlsxXSxFPUZbMF0rRC5vZmZzZXRXaWR0aCxBPUZbMV0rRC5vZmZzZXRIZWlnaHQs Qj1GWzBdO3JldHVybiBuZXcgWU9TV0lER0VUUy51dGlsLlJlZ2lvbihDLEUsQSxC KTt9O1lPU1dJREdFVFMudXRpbC5Qb2ludD1mdW5jdGlvbihBLEIpe2lmKFlPU1dJ REdFVFMubGFuZy5pc0FycmF5KEEpKXtCPUFbMV07QT1BWzBdO31ZT1NXSURHRVRT LnV0aWwuUG9pbnQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsQixB LEIsQSk7fTtZT1NXSURHRVRTLmV4dGVuZChZT1NXSURHRVRTLnV0aWwuUG9pbnQs WU9TV0lER0VUUy51dGlsLlJlZ2lvbik7KGZ1bmN0aW9uKCl7dmFyIEI9WU9TV0lE R0VUUy51dGlsLEE9ImNsaWVudFRvcCIsRj0iY2xpZW50TGVmdCIsSj0icGFyZW50 Tm9kZSIsSz0icmlnaHQiLFc9Imhhc0xheW91dCIsST0icHgiLFU9Im9wYWNpdHki LEw9ImF1dG8iLEQ9ImJvcmRlckxlZnRXaWR0aCIsRz0iYm9yZGVyVG9wV2lkdGgi LFA9ImJvcmRlclJpZ2h0V2lkdGgiLFY9ImJvcmRlckJvdHRvbVdpZHRoIixTPSJ2 aXNpYmxlIixRPSJ0cmFuc3BhcmVudCIsTj0iaGVpZ2h0IixFPSJ3aWR0aCIsSD0i c3R5bGUiLFQ9ImN1cnJlbnRTdHlsZSIsUj0vXndpZHRofGhlaWdodCQvLE89L14o XGRbLlxkXSopKyhlbXxleHxweHxnZHxyZW18dnd8dmh8dm18Y2h8bW18Y218aW58 cHR8cGN8ZGVnfHJhZHxtc3xzfGh6fGtoenwlKXsxfT8vaSxNPXtnZXQ6ZnVuY3Rp b24oWCxaKXt2YXIgWT0iIixhPVhbVF1bWl07aWYoWj09PVUpe1k9Qi5Eb20uZ2V0 U3R5bGUoWCxVKTt9ZWxzZXtpZighYXx8KGEuaW5kZXhPZiYmYS5pbmRleE9mKEkp Pi0xKSl7WT1hO31lbHNle2lmKEIuRG9tLklFX0NPTVBVVEVEW1pdKXtZPUIuRG9t LklFX0NPTVBVVEVEW1pdKFgsWik7fWVsc2V7aWYoTy50ZXN0KGEpKXtZPUIuRG9t LklFLkNvbXB1dGVkU3R5bGUuZ2V0UGl4ZWwoWCxaKTt9ZWxzZXtZPWE7fX19fXJl dHVybiBZO30sZ2V0T2Zmc2V0OmZ1bmN0aW9uKFosZSl7dmFyIGI9WltUXVtlXSxY PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSksYz0ib2Zmc2V0 IitYLFk9InBpeGVsIitYLGE9IiIsZDtpZihiPT1MKXtkPVpbY107aWYoZD09PXVu ZGVmaW5lZCl7YT0wO31hPWQ7aWYoUi50ZXN0KGUpKXtaW0hdW2VdPWQ7aWYoWltj XT5kKXthPWQtKFpbY10tZCk7fVpbSF1bZV09TDt9fWVsc2V7aWYoIVpbSF1bWV0m JiFaW0hdW2VdKXtaW0hdW2VdPWI7fWE9WltIXVtZXTt9cmV0dXJuIGErSTt9LGdl dEJvcmRlcldpZHRoOmZ1bmN0aW9uKFgsWil7dmFyIFk9bnVsbDtpZighWFtUXVtX XSl7WFtIXS56b29tPTE7fXN3aXRjaChaKXtjYXNlIEc6WT1YW0FdO2JyZWFrO2Nh c2UgVjpZPVgub2Zmc2V0SGVpZ2h0LVguY2xpZW50SGVpZ2h0LVhbQV07YnJlYWs7 Y2FzZSBEOlk9WFtGXTticmVhaztjYXNlIFA6WT1YLm9mZnNldFdpZHRoLVguY2xp ZW50V2lkdGgtWFtGXTticmVhazt9cmV0dXJuIFkrSTt9LGdldFBpeGVsOmZ1bmN0 aW9uKFksWCl7dmFyIGE9bnVsbCxiPVlbVF1bS10sWj1ZW1RdW1hdO1lbSF1bS109 WjthPVlbSF0ucGl4ZWxSaWdodDtZW0hdW0tdPWI7cmV0dXJuIGErSTt9LGdldE1h cmdpbjpmdW5jdGlvbihZLFgpe3ZhciBaO2lmKFlbVF1bWF09PUwpe1o9MCtJO31l bHNle1o9Qi5Eb20uSUUuQ29tcHV0ZWRTdHlsZS5nZXRQaXhlbChZLFgpO31yZXR1 cm4gWjt9LGdldFZpc2liaWxpdHk6ZnVuY3Rpb24oWSxYKXt2YXIgWjt3aGlsZSgo Wj1ZW1RdKSYmWltYXT09ImluaGVyaXQiKXtZPVlbSl07fXJldHVybihaKT9aW1hd OlM7fSxnZXRDb2xvcjpmdW5jdGlvbihZLFgpe3JldHVybiBCLkRvbS5Db2xvci50 b1JHQihZW1RdW1hdKXx8UTt9LGdldEJvcmRlckNvbG9yOmZ1bmN0aW9uKFksWCl7 dmFyIFo9WVtUXSxhPVpbWF18fFouY29sb3I7cmV0dXJuIEIuRG9tLkNvbG9yLnRv UkdCKEIuRG9tLkNvbG9yLnRvSGV4KGEpKTt9fSxDPXt9O0MudG9wPUMucmlnaHQ9 Qy5ib3R0b209Qy5sZWZ0PUNbRV09Q1tOXT1NLmdldE9mZnNldDtDLmNvbG9yPU0u Z2V0Q29sb3I7Q1tHXT1DW1BdPUNbVl09Q1tEXT1NLmdldEJvcmRlcldpZHRoO0Mu bWFyZ2luVG9wPUMubWFyZ2luUmlnaHQ9Qy5tYXJnaW5Cb3R0b209Qy5tYXJnaW5M ZWZ0PU0uZ2V0TWFyZ2luO0MudmlzaWJpbGl0eT1NLmdldFZpc2liaWxpdHk7Qy5i b3JkZXJDb2xvcj1DLmJvcmRlclRvcENvbG9yPUMuYm9yZGVyUmlnaHRDb2xvcj1D LmJvcmRlckJvdHRvbUNvbG9yPUMuYm9yZGVyTGVmdENvbG9yPU0uZ2V0Qm9yZGVy Q29sb3I7Qi5Eb20uSUVfQ09NUFVURUQ9QztCLkRvbS5JRV9Db21wdXRlZFN0eWxl PU07fSkoKTsoZnVuY3Rpb24oKXt2YXIgQz0idG9TdHJpbmciLEE9cGFyc2VJbnQs Qj1SZWdFeHAsRD1ZT1NXSURHRVRTLnV0aWw7RC5Eb20uQ29sb3I9e0tFWVdPUkRT OntibGFjazoiMDAwIixzaWx2ZXI6ImMwYzBjMCIsZ3JheToiODA4MDgwIix3aGl0 ZToiZmZmIixtYXJvb246IjgwMDAwMCIscmVkOiJmMDAiLHB1cnBsZToiODAwMDgw IixmdWNoc2lhOiJmMGYiLGdyZWVuOiIwMDgwMDAiLGxpbWU6IjBmMCIsb2xpdmU6 IjgwODAwMCIseWVsbG93OiJmZjAiLG5hdnk6IjAwMDA4MCIsYmx1ZToiMDBmIix0 ZWFsOiIwMDgwODAiLGFxdWE6IjBmZiJ9LHJlX1JHQjovXnJnYlwoKFswLTldKylc cyosXHMqKFswLTldKylccyosXHMqKFswLTldKylcKSQvaSxyZV9oZXg6L14jPyhb MC05QS1GXXsyfSkoWzAtOUEtRl17Mn0pKFswLTlBLUZdezJ9KSQvaSxyZV9oZXgz Oi8oWzAtOUEtRl0pL2dpLHRvUkdCOmZ1bmN0aW9uKEUpe2lmKCFELkRvbS5Db2xv ci5yZV9SR0IudGVzdChFKSl7RT1ELkRvbS5Db2xvci50b0hleChFKTt9aWYoRC5E b20uQ29sb3IucmVfaGV4LmV4ZWMoRSkpe0U9InJnYigiK1tBKEIuJDEsMTYpLEEo Qi4kMiwxNiksQShCLiQzLDE2KV0uam9pbigiLCAiKSsiKSI7fXJldHVybiBFO30s dG9IZXg6ZnVuY3Rpb24oSCl7SD1ELkRvbS5Db2xvci5LRVlXT1JEU1tIXXx8SDtp ZihELkRvbS5Db2xvci5yZV9SR0IuZXhlYyhIKSl7dmFyIEc9KEIuJDEubGVuZ3Ro PT09MSk/IjAiK0IuJDE6TnVtYmVyKEIuJDEpLEY9KEIuJDIubGVuZ3RoPT09MSk/ IjAiK0IuJDI6TnVtYmVyKEIuJDIpLEU9KEIuJDMubGVuZ3RoPT09MSk/IjAiK0Iu JDM6TnVtYmVyKEIuJDMpO0g9W0dbQ10oMTYpLEZbQ10oMTYpLEVbQ10oMTYpXS5q b2luKCIiKTt9aWYoSC5sZW5ndGg8Nil7SD1ILnJlcGxhY2UoRC5Eb20uQ29sb3Iu cmVfaGV4MywiJDEkMSIpO31pZihIIT09InRyYW5zcGFyZW50IiYmSC5pbmRleE9m KCIjIik8MCl7SD0iIyIrSDt9cmV0dXJuIEgudG9Mb3dlckNhc2UoKTt9fTt9KCkp O1lPU1dJREdFVFMucmVnaXN0ZXIoImRvbSIsWU9TV0lER0VUUy51dGlsLkRvbSx7 dmVyc2lvbjoiMi43LjAiLGJ1aWxkOiIxNzk2In0pO1lPU1dJREdFVFMudXRpbC5D dXN0b21FdmVudD1mdW5jdGlvbihELEMsQixBKXt0aGlzLnR5cGU9RDt0aGlzLnNj b3BlPUN8fHdpbmRvdzt0aGlzLnNpbGVudD1CO3RoaXMuc2lnbmF0dXJlPUF8fFlP U1dJREdFVFMudXRpbC5DdXN0b21FdmVudC5MSVNUO3RoaXMuc3Vic2NyaWJlcnM9 W107aWYoIXRoaXMuc2lsZW50KXt9dmFyIEU9Il9ZVUlDRU9uU3Vic2NyaWJlIjtp ZihEIT09RSl7dGhpcy5zdWJzY3JpYmVFdmVudD1uZXcgWU9TV0lER0VUUy51dGls LkN1c3RvbUV2ZW50KEUsdGhpcyx0cnVlKTt9dGhpcy5sYXN0RXJyb3I9bnVsbDt9 O1lPU1dJREdFVFMudXRpbC5DdXN0b21FdmVudC5MSVNUPTA7WU9TV0lER0VUUy51 dGlsLkN1c3RvbUV2ZW50LkZMQVQ9MTtZT1NXSURHRVRTLnV0aWwuQ3VzdG9tRXZl bnQucHJvdG90eXBlPXtzdWJzY3JpYmU6ZnVuY3Rpb24oQSxCLEMpe2lmKCFBKXt0 aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2FsbGJhY2sgZm9yIHN1YnNjcmliZXIg dG8gJyIrdGhpcy50eXBlKyInIik7fWlmKHRoaXMuc3Vic2NyaWJlRXZlbnQpe3Ro aXMuc3Vic2NyaWJlRXZlbnQuZmlyZShBLEIsQyk7fXRoaXMuc3Vic2NyaWJlcnMu cHVzaChuZXcgWU9TV0lER0VUUy51dGlsLlN1YnNjcmliZXIoQSxCLEMpKTt9LHVu c3Vic2NyaWJlOmZ1bmN0aW9uKEQsRil7aWYoIUQpe3JldHVybiB0aGlzLnVuc3Vi c2NyaWJlQWxsKCk7fXZhciBFPWZhbHNlO2Zvcih2YXIgQj0wLEE9dGhpcy5zdWJz Y3JpYmVycy5sZW5ndGg7QjxBOysrQil7dmFyIEM9dGhpcy5zdWJzY3JpYmVyc1tC XTtpZihDJiZDLmNvbnRhaW5zKEQsRikpe3RoaXMuX2RlbGV0ZShCKTtFPXRydWU7 fX1yZXR1cm4gRTt9LGZpcmU6ZnVuY3Rpb24oKXt0aGlzLmxhc3RFcnJvcj1udWxs O3ZhciBLPVtdLEU9dGhpcy5zdWJzY3JpYmVycy5sZW5ndGg7aWYoIUUmJnRoaXMu c2lsZW50KXtyZXR1cm4gdHJ1ZTt9dmFyIEk9W10uc2xpY2UuY2FsbChhcmd1bWVu dHMsMCksRz10cnVlLEQsSj1mYWxzZTtpZighdGhpcy5zaWxlbnQpe312YXIgQz10 aGlzLnN1YnNjcmliZXJzLnNsaWNlKCksQT1ZT1NXSURHRVRTLnV0aWwuRXZlbnQu dGhyb3dFcnJvcnM7Zm9yKEQ9MDtEPEU7KytEKXt2YXIgTT1DW0RdO2lmKCFNKXtK PXRydWU7fWVsc2V7aWYoIXRoaXMuc2lsZW50KXt9dmFyIEw9TS5nZXRTY29wZSh0 aGlzLnNjb3BlKTtpZih0aGlzLnNpZ25hdHVyZT09WU9TV0lER0VUUy51dGlsLkN1 c3RvbUV2ZW50LkZMQVQpe3ZhciBCPW51bGw7aWYoSS5sZW5ndGg+MCl7Qj1JWzBd O310cnl7Rz1NLmZuLmNhbGwoTCxCLE0ub2JqKTt9Y2F0Y2goRil7dGhpcy5sYXN0 RXJyb3I9RjtpZihBKXt0aHJvdyBGO319fWVsc2V7dHJ5e0c9TS5mbi5jYWxsKEws dGhpcy50eXBlLEksTS5vYmopO31jYXRjaChIKXt0aGlzLmxhc3RFcnJvcj1IO2lm KEEpe3Rocm93IEg7fX19aWYoZmFsc2U9PT1HKXtpZighdGhpcy5zaWxlbnQpe31i cmVhazt9fX1yZXR1cm4oRyE9PWZhbHNlKTt9LHVuc3Vic2NyaWJlQWxsOmZ1bmN0 aW9uKCl7dmFyIEE9dGhpcy5zdWJzY3JpYmVycy5sZW5ndGgsQjtmb3IoQj1BLTE7 Qj4tMTtCLS0pe3RoaXMuX2RlbGV0ZShCKTt9dGhpcy5zdWJzY3JpYmVycz1bXTty ZXR1cm4gQTt9LF9kZWxldGU6ZnVuY3Rpb24oQSl7dmFyIEI9dGhpcy5zdWJzY3Jp YmVyc1tBXTtpZihCKXtkZWxldGUgQi5mbjtkZWxldGUgQi5vYmo7fXRoaXMuc3Vi c2NyaWJlcnMuc3BsaWNlKEEsMSk7fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVy biJDdXN0b21FdmVudDogIisiJyIrdGhpcy50eXBlKyInLCAiKyJjb250ZXh0OiAi K3RoaXMuc2NvcGU7fX07WU9TV0lER0VUUy51dGlsLlN1YnNjcmliZXI9ZnVuY3Rp b24oQSxCLEMpe3RoaXMuZm49QTt0aGlzLm9iaj1ZT1NXSURHRVRTLmxhbmcuaXNV bmRlZmluZWQoQik/bnVsbDpCO3RoaXMub3ZlcnJpZGVDb250ZXh0PUM7fTtZT1NX SURHRVRTLnV0aWwuU3Vic2NyaWJlci5wcm90b3R5cGUuZ2V0U2NvcGU9ZnVuY3Rp b24oQSl7aWYodGhpcy5vdmVycmlkZUNvbnRleHQpe2lmKHRoaXMub3ZlcnJpZGVD b250ZXh0PT09dHJ1ZSl7cmV0dXJuIHRoaXMub2JqO31lbHNle3JldHVybiB0aGlz Lm92ZXJyaWRlQ29udGV4dDt9fXJldHVybiBBO307WU9TV0lER0VUUy51dGlsLlN1 YnNjcmliZXIucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEEsQil7aWYoQil7 cmV0dXJuKHRoaXMuZm49PUEmJnRoaXMub2JqPT1CKTt9ZWxzZXtyZXR1cm4odGhp cy5mbj09QSk7fX07WU9TV0lER0VUUy51dGlsLlN1YnNjcmliZXIucHJvdG90eXBl LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlN1YnNjcmliZXIgeyBvYmo6ICIr dGhpcy5vYmorIiwgb3ZlcnJpZGVDb250ZXh0OiAiKyh0aGlzLm92ZXJyaWRlQ29u dGV4dHx8Im5vIikrIiB9Ijt9O2lmKCFZT1NXSURHRVRTLnV0aWwuRXZlbnQpe1lP U1dJREdFVFMudXRpbC5FdmVudD1mdW5jdGlvbigpe3ZhciBIPWZhbHNlO3ZhciBJ PVtdO3ZhciBKPVtdO3ZhciBHPVtdO3ZhciBFPVtdO3ZhciBDPTA7dmFyIEY9W107 dmFyIEI9W107dmFyIEE9MDt2YXIgRD17NjMyMzI6MzgsNjMyMzM6NDAsNjMyMzQ6 MzcsNjMyMzU6MzksNjMyNzY6MzMsNjMyNzc6MzQsMjU6OX07dmFyIEs9WU9TV0lE R0VUUy5lbnYudWEuaWU/ImZvY3VzaW4iOiJmb2N1cyI7dmFyIEw9WU9TV0lER0VU Uy5lbnYudWEuaWU/ImZvY3Vzb3V0IjoiYmx1ciI7cmV0dXJue1BPTExfUkVUUllT OjIwMDAsUE9MTF9JTlRFUlZBTDoyMCxFTDowLFRZUEU6MSxGTjoyLFdGTjozLFVO TE9BRF9PQko6MyxBREpfU0NPUEU6NCxPQko6NSxPVkVSUklERTo2LGxhc3RFcnJv cjpudWxsLGlzU2FmYXJpOllPU1dJREdFVFMuZW52LnVhLndlYmtpdCx3ZWJraXQ6 WU9TV0lER0VUUy5lbnYudWEud2Via2l0LGlzSUU6WU9TV0lER0VUUy5lbnYudWEu aWUsX2ludGVydmFsOm51bGwsX2RyaTpudWxsLERPTVJlYWR5OmZhbHNlLHRocm93 RXJyb3JzOmZhbHNlLHN0YXJ0SW50ZXJ2YWw6ZnVuY3Rpb24oKXtpZighdGhpcy5f aW50ZXJ2YWwpe3ZhciBNPXRoaXM7dmFyIE49ZnVuY3Rpb24oKXtNLl90cnlQcmVs b2FkQXR0YWNoKCk7fTt0aGlzLl9pbnRlcnZhbD1zZXRJbnRlcnZhbChOLHRoaXMu UE9MTF9JTlRFUlZBTCk7fX0sb25BdmFpbGFibGU6ZnVuY3Rpb24oUyxPLFEsUixQ KXt2YXIgTT0oWU9TV0lER0VUUy5sYW5nLmlzU3RyaW5nKFMpKT9bU106Uztmb3Io dmFyIE49MDtOPE0ubGVuZ3RoO049TisxKXtGLnB1c2goe2lkOk1bTl0sZm46Tyxv Ymo6USxvdmVycmlkZUNvbnRleHQ6UixjaGVja1JlYWR5OlB9KTt9Qz10aGlzLlBP TExfUkVUUllTO3RoaXMuc3RhcnRJbnRlcnZhbCgpO30sb25Db250ZW50UmVhZHk6 ZnVuY3Rpb24oUCxNLE4sTyl7dGhpcy5vbkF2YWlsYWJsZShQLE0sTixPLHRydWUp O30sb25ET01SZWFkeTpmdW5jdGlvbihNLE4sTyl7aWYodGhpcy5ET01SZWFkeSl7 c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBQPXdpbmRvdztpZihPKXtpZihPPT09 dHJ1ZSl7UD1OO31lbHNle1A9Tzt9fU0uY2FsbChQLCJET01SZWFkeSIsW10sTik7 fSwwKTt9ZWxzZXt0aGlzLkRPTVJlYWR5RXZlbnQuc3Vic2NyaWJlKE0sTixPKTt9 fSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oTyxNLFksUyxXLGIpe2lmKCFZfHwhWS5j YWxsKXtyZXR1cm4gZmFsc2U7fWlmKHRoaXMuX2lzVmFsaWRDb2xsZWN0aW9uKE8p KXt2YXIgWj10cnVlO2Zvcih2YXIgVD0wLFY9Ty5sZW5ndGg7VDxWOysrVCl7Wj10 aGlzLm9uKE9bVF0sTSxZLFMsVykmJlo7fXJldHVybiBaO31lbHNle2lmKFlPU1dJ REdFVFMubGFuZy5pc1N0cmluZyhPKSl7dmFyIFI9dGhpcy5nZXRFbChPKTtpZihS KXtPPVI7fWVsc2V7dGhpcy5vbkF2YWlsYWJsZShPLGZ1bmN0aW9uKCl7WU9TV0lE R0VUUy51dGlsLkV2ZW50Lm9uKE8sTSxZLFMsVyk7fSk7cmV0dXJuIHRydWU7fX19 aWYoIU8pe3JldHVybiBmYWxzZTt9aWYoInVubG9hZCI9PU0mJlMhPT10aGlzKXtK W0oubGVuZ3RoXT1bTyxNLFksUyxXXTtyZXR1cm4gdHJ1ZTt9dmFyIE49TztpZihX KXtpZihXPT09dHJ1ZSl7Tj1TO31lbHNle049Vzt9fXZhciBQPWZ1bmN0aW9uKGMp e3JldHVybiBZLmNhbGwoTixZT1NXSURHRVRTLnV0aWwuRXZlbnQuZ2V0RXZlbnQo YyxPKSxTKTt9O3ZhciBhPVtPLE0sWSxQLE4sUyxXXTt2YXIgVT1JLmxlbmd0aDtJ W1VdPWE7aWYodGhpcy51c2VMZWdhY3lFdmVudChPLE0pKXt2YXIgUT10aGlzLmdl dExlZ2FjeUluZGV4KE8sTSk7aWYoUT09LTF8fE8hPUdbUV1bMF0pe1E9Ry5sZW5n dGg7QltPLmlkK01dPVE7R1tRXT1bTyxNLE9bIm9uIitNXV07RVtRXT1bXTtPWyJv biIrTV09ZnVuY3Rpb24oYyl7WU9TV0lER0VUUy51dGlsLkV2ZW50LmZpcmVMZWdh Y3lFdmVudChZT1NXSURHRVRTLnV0aWwuRXZlbnQuZ2V0RXZlbnQoYyksUSk7fTt9 RVtRXS5wdXNoKGEpO31lbHNle3RyeXt0aGlzLl9zaW1wbGVBZGQoTyxNLFAsYik7 fWNhdGNoKFgpe3RoaXMubGFzdEVycm9yPVg7dGhpcy5yZW1vdmVMaXN0ZW5lcihP LE0sWSk7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fSxhZGRMaXN0ZW5lcjpm dW5jdGlvbihOLFEsTSxPLFApe3JldHVybiB0aGlzLl9hZGRMaXN0ZW5lcihOLFEs TSxPLFAsZmFsc2UpO30sYWRkRm9jdXNMaXN0ZW5lcjpmdW5jdGlvbihOLE0sTyxQ KXtyZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIoTixLLE0sTyxQLHRydWUpO30scmVt b3ZlRm9jdXNMaXN0ZW5lcjpmdW5jdGlvbihOLE0pe3JldHVybiB0aGlzLnJlbW92 ZUxpc3RlbmVyKE4sSyxNKTt9LGFkZEJsdXJMaXN0ZW5lcjpmdW5jdGlvbihOLE0s TyxQKXtyZXR1cm4gdGhpcy5fYWRkTGlzdGVuZXIoTixMLE0sTyxQLHRydWUpO30s cmVtb3ZlQmx1ckxpc3RlbmVyOmZ1bmN0aW9uKE4sTSl7cmV0dXJuIHRoaXMucmVt b3ZlTGlzdGVuZXIoTixMLE0pO30sZmlyZUxlZ2FjeUV2ZW50OmZ1bmN0aW9uKFIs UCl7dmFyIFQ9dHJ1ZSxNLFYsVSxOLFM7Vj1FW1BdLnNsaWNlKCk7Zm9yKHZhciBP PTAsUT1WLmxlbmd0aDtPPFE7KytPKXtVPVZbT107aWYoVSYmVVt0aGlzLldGTl0p e049VVt0aGlzLkFESl9TQ09QRV07Uz1VW3RoaXMuV0ZOXS5jYWxsKE4sUik7VD0o VCYmUyk7fX1NPUdbUF07aWYoTSYmTVsyXSl7TVsyXShSKTt9cmV0dXJuIFQ7fSxn ZXRMZWdhY3lJbmRleDpmdW5jdGlvbihOLE8pe3ZhciBNPXRoaXMuZ2VuZXJhdGVJ ZChOKStPO2lmKHR5cGVvZiBCW01dPT0idW5kZWZpbmVkIil7cmV0dXJuLTE7fWVs c2V7cmV0dXJuIEJbTV07fX0sdXNlTGVnYWN5RXZlbnQ6ZnVuY3Rpb24oTSxOKXty ZXR1cm4odGhpcy53ZWJraXQmJnRoaXMud2Via2l0PDQxOSYmKCJjbGljayI9PU58 fCJkYmxjbGljayI9PU4pKTt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKE4sTSxW KXt2YXIgUSxULFg7aWYodHlwZW9mIE49PSJzdHJpbmciKXtOPXRoaXMuZ2V0RWwo Tik7fWVsc2V7aWYodGhpcy5faXNWYWxpZENvbGxlY3Rpb24oTikpe3ZhciBXPXRy dWU7Zm9yKFE9Ti5sZW5ndGgtMTtRPi0xO1EtLSl7Vz0odGhpcy5yZW1vdmVMaXN0 ZW5lcihOW1FdLE0sVikmJlcpO31yZXR1cm4gVzt9fWlmKCFWfHwhVi5jYWxsKXty ZXR1cm4gdGhpcy5wdXJnZUVsZW1lbnQoTixmYWxzZSxNKTt9aWYoInVubG9hZCI9 PU0pe2ZvcihRPUoubGVuZ3RoLTE7UT4tMTtRLS0pe1g9SltRXTtpZihYJiZYWzBd PT1OJiZYWzFdPT1NJiZYWzJdPT1WKXtKLnNwbGljZShRLDEpO3JldHVybiB0cnVl O319cmV0dXJuIGZhbHNlO312YXIgUj1udWxsO3ZhciBTPWFyZ3VtZW50c1szXTtp ZigidW5kZWZpbmVkIj09PXR5cGVvZiBTKXtTPXRoaXMuX2dldENhY2hlSW5kZXgo TixNLFYpO31pZihTPj0wKXtSPUlbU107fWlmKCFOfHwhUil7cmV0dXJuIGZhbHNl O31pZih0aGlzLnVzZUxlZ2FjeUV2ZW50KE4sTSkpe3ZhciBQPXRoaXMuZ2V0TGVn YWN5SW5kZXgoTixNKTt2YXIgTz1FW1BdO2lmKE8pe2ZvcihRPTAsVD1PLmxlbmd0 aDtRPFQ7KytRKXtYPU9bUV07aWYoWCYmWFt0aGlzLkVMXT09TiYmWFt0aGlzLlRZ UEVdPT1NJiZYW3RoaXMuRk5dPT1WKXtPLnNwbGljZShRLDEpO2JyZWFrO319fX1l bHNle3RyeXt0aGlzLl9zaW1wbGVSZW1vdmUoTixNLFJbdGhpcy5XRk5dLGZhbHNl KTt9Y2F0Y2goVSl7dGhpcy5sYXN0RXJyb3I9VTtyZXR1cm4gZmFsc2U7fX1kZWxl dGUgSVtTXVt0aGlzLldGTl07ZGVsZXRlIElbU11bdGhpcy5GTl07SS5zcGxpY2Uo UywxKTtyZXR1cm4gdHJ1ZTt9LGdldFRhcmdldDpmdW5jdGlvbihPLE4pe3ZhciBN PU8udGFyZ2V0fHxPLnNyY0VsZW1lbnQ7cmV0dXJuIHRoaXMucmVzb2x2ZVRleHRO b2RlKE0pO30scmVzb2x2ZVRleHROb2RlOmZ1bmN0aW9uKE4pe3RyeXtpZihOJiYz PT1OLm5vZGVUeXBlKXtyZXR1cm4gTi5wYXJlbnROb2RlO319Y2F0Y2goTSl7fXJl dHVybiBOO30sZ2V0UGFnZVg6ZnVuY3Rpb24oTil7dmFyIE09Ti5wYWdlWDtpZigh TSYmMCE9PU0pe009Ti5jbGllbnRYfHwwO2lmKHRoaXMuaXNJRSl7TSs9dGhpcy5f Z2V0U2Nyb2xsTGVmdCgpO319cmV0dXJuIE07fSxnZXRQYWdlWTpmdW5jdGlvbihN KXt2YXIgTj1NLnBhZ2VZO2lmKCFOJiYwIT09Til7Tj1NLmNsaWVudFl8fDA7aWYo dGhpcy5pc0lFKXtOKz10aGlzLl9nZXRTY3JvbGxUb3AoKTt9fXJldHVybiBOO30s Z2V0WFk6ZnVuY3Rpb24oTSl7cmV0dXJuW3RoaXMuZ2V0UGFnZVgoTSksdGhpcy5n ZXRQYWdlWShNKV07fSxnZXRSZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKE4pe3ZhciBN PU4ucmVsYXRlZFRhcmdldDtpZighTSl7aWYoTi50eXBlPT0ibW91c2VvdXQiKXtN PU4udG9FbGVtZW50O31lbHNle2lmKE4udHlwZT09Im1vdXNlb3ZlciIpe009Ti5m cm9tRWxlbWVudDt9fX1yZXR1cm4gdGhpcy5yZXNvbHZlVGV4dE5vZGUoTSk7fSxn ZXRUaW1lOmZ1bmN0aW9uKE8pe2lmKCFPLnRpbWUpe3ZhciBOPW5ldyBEYXRlKCku Z2V0VGltZSgpO3RyeXtPLnRpbWU9Tjt9Y2F0Y2goTSl7dGhpcy5sYXN0RXJyb3I9 TTtyZXR1cm4gTjt9fXJldHVybiBPLnRpbWU7fSxzdG9wRXZlbnQ6ZnVuY3Rpb24o TSl7dGhpcy5zdG9wUHJvcGFnYXRpb24oTSk7dGhpcy5wcmV2ZW50RGVmYXVsdChN KTt9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbihNKXtpZihNLnN0b3BQcm9wYWdh dGlvbil7TS5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXtNLmNhbmNlbEJ1YmJsZT10 cnVlO319LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKE0pe2lmKE0ucHJldmVudERl ZmF1bHQpe00ucHJldmVudERlZmF1bHQoKTt9ZWxzZXtNLnJldHVyblZhbHVlPWZh bHNlO319LGdldEV2ZW50OmZ1bmN0aW9uKE8sTSl7dmFyIE49T3x8d2luZG93LmV2 ZW50O2lmKCFOKXt2YXIgUD10aGlzLmdldEV2ZW50LmNhbGxlcjt3aGlsZShQKXtO PVAuYXJndW1lbnRzWzBdO2lmKE4mJkV2ZW50PT1OLmNvbnN0cnVjdG9yKXticmVh azt9UD1QLmNhbGxlcjt9fXJldHVybiBOO30sZ2V0Q2hhckNvZGU6ZnVuY3Rpb24o Til7dmFyIE09Ti5rZXlDb2RlfHxOLmNoYXJDb2RlfHwwO2lmKFlPU1dJREdFVFMu ZW52LnVhLndlYmtpdCYmKE0gaW4gRCkpe009RFtNXTt9cmV0dXJuIE07fSxfZ2V0 Q2FjaGVJbmRleDpmdW5jdGlvbihRLFIsUCl7Zm9yKHZhciBPPTAsTj1JLmxlbmd0 aDtPPE47Tz1PKzEpe3ZhciBNPUlbT107aWYoTSYmTVt0aGlzLkZOXT09UCYmTVt0 aGlzLkVMXT09USYmTVt0aGlzLlRZUEVdPT1SKXtyZXR1cm4gTzt9fXJldHVybi0x O30sZ2VuZXJhdGVJZDpmdW5jdGlvbihNKXt2YXIgTj1NLmlkO2lmKCFOKXtOPSJ5 dWlldnRhdXRvaWQtIitBOysrQTtNLmlkPU47fXJldHVybiBOO30sX2lzVmFsaWRD b2xsZWN0aW9uOmZ1bmN0aW9uKE4pe3RyeXtyZXR1cm4oTiYmdHlwZW9mIE4hPT0i c3RyaW5nIiYmTi5sZW5ndGgmJiFOLnRhZ05hbWUmJiFOLmFsZXJ0JiZ0eXBlb2Yg TlswXSE9PSJ1bmRlZmluZWQiKTt9Y2F0Y2goTSl7cmV0dXJuIGZhbHNlO319LGVs Q2FjaGU6e30sZ2V0RWw6ZnVuY3Rpb24oTSl7cmV0dXJuKHR5cGVvZiBNPT09InN0 cmluZyIpP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKE0pOk07fSxjbGVhckNhY2hl OmZ1bmN0aW9uKCl7fSxET01SZWFkeUV2ZW50Om5ldyBZT1NXSURHRVRTLnV0aWwu Q3VzdG9tRXZlbnQoIkRPTVJlYWR5Iix0aGlzKSxfbG9hZDpmdW5jdGlvbihOKXtp ZighSCl7SD10cnVlO3ZhciBNPVlPU1dJREdFVFMudXRpbC5FdmVudDtNLl9yZWFk eSgpO00uX3RyeVByZWxvYWRBdHRhY2goKTt9fSxfcmVhZHk6ZnVuY3Rpb24oTil7 dmFyIE09WU9TV0lER0VUUy51dGlsLkV2ZW50O2lmKCFNLkRPTVJlYWR5KXtNLkRP TVJlYWR5PXRydWU7TS5ET01SZWFkeUV2ZW50LmZpcmUoKTtNLl9zaW1wbGVSZW1v dmUoZG9jdW1lbnQsIkRPTUNvbnRlbnRMb2FkZWQiLE0uX3JlYWR5KTt9fSxfdHJ5 UHJlbG9hZEF0dGFjaDpmdW5jdGlvbigpe2lmKEYubGVuZ3RoPT09MCl7Qz0wO2lm KHRoaXMuX2ludGVydmFsKXtjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTt0 aGlzLl9pbnRlcnZhbD1udWxsO31yZXR1cm47fWlmKHRoaXMubG9ja2VkKXtyZXR1 cm47fWlmKHRoaXMuaXNJRSl7aWYoIXRoaXMuRE9NUmVhZHkpe3RoaXMuc3RhcnRJ bnRlcnZhbCgpO3JldHVybjt9fXRoaXMubG9ja2VkPXRydWU7dmFyIFM9IUg7aWYo IVMpe1M9KEM+MCYmRi5sZW5ndGg+MCk7fXZhciBSPVtdO3ZhciBUPWZ1bmN0aW9u KFYsVyl7dmFyIFU9VjtpZihXLm92ZXJyaWRlQ29udGV4dCl7aWYoVy5vdmVycmlk ZUNvbnRleHQ9PT10cnVlKXtVPVcub2JqO31lbHNle1U9Vy5vdmVycmlkZUNvbnRl eHQ7fX1XLmZuLmNhbGwoVSxXLm9iaik7fTt2YXIgTixNLFEsUCxPPVtdO2ZvcihO PTAsTT1GLmxlbmd0aDtOPE07Tj1OKzEpe1E9RltOXTtpZihRKXtQPXRoaXMuZ2V0 RWwoUS5pZCk7aWYoUCl7aWYoUS5jaGVja1JlYWR5KXtpZihIfHxQLm5leHRTaWJs aW5nfHwhUyl7Ty5wdXNoKFEpO0ZbTl09bnVsbDt9fWVsc2V7VChQLFEpO0ZbTl09 bnVsbDt9fWVsc2V7Ui5wdXNoKFEpO319fWZvcihOPTAsTT1PLmxlbmd0aDtOPE07 Tj1OKzEpe1E9T1tOXTtUKHRoaXMuZ2V0RWwoUS5pZCksUSk7fUMtLTtpZihTKXtm b3IoTj1GLmxlbmd0aC0xO04+LTE7Ti0tKXtRPUZbTl07aWYoIVF8fCFRLmlkKXtG LnNwbGljZShOLDEpO319dGhpcy5zdGFydEludGVydmFsKCk7fWVsc2V7aWYodGhp cy5faW50ZXJ2YWwpe2NsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO3RoaXMu X2ludGVydmFsPW51bGw7fX10aGlzLmxvY2tlZD1mYWxzZTt9LHB1cmdlRWxlbWVu dDpmdW5jdGlvbihRLFIsVCl7dmFyIE89KFlPU1dJREdFVFMubGFuZy5pc1N0cmlu ZyhRKSk/dGhpcy5nZXRFbChRKTpRO3ZhciBTPXRoaXMuZ2V0TGlzdGVuZXJzKE8s VCksUCxNO2lmKFMpe2ZvcihQPVMubGVuZ3RoLTE7UD4tMTtQLS0pe3ZhciBOPVNb UF07dGhpcy5yZW1vdmVMaXN0ZW5lcihPLE4udHlwZSxOLmZuKTt9fWlmKFImJk8m Jk8uY2hpbGROb2Rlcyl7Zm9yKFA9MCxNPU8uY2hpbGROb2Rlcy5sZW5ndGg7UDxN OysrUCl7dGhpcy5wdXJnZUVsZW1lbnQoTy5jaGlsZE5vZGVzW1BdLFIsVCk7fX19 LGdldExpc3RlbmVyczpmdW5jdGlvbihPLE0pe3ZhciBSPVtdLE47aWYoIU0pe049 W0ksSl07fWVsc2V7aWYoTT09PSJ1bmxvYWQiKXtOPVtKXTt9ZWxzZXtOPVtJXTt9 fXZhciBUPShZT1NXSURHRVRTLmxhbmcuaXNTdHJpbmcoTykpP3RoaXMuZ2V0RWwo Tyk6Tztmb3IodmFyIFE9MDtRPE4ubGVuZ3RoO1E9USsxKXt2YXIgVj1OW1FdO2lm KFYpe2Zvcih2YXIgUz0wLFU9Vi5sZW5ndGg7UzxVOysrUyl7dmFyIFA9VltTXTtp ZihQJiZQW3RoaXMuRUxdPT09VCYmKCFNfHxNPT09UFt0aGlzLlRZUEVdKSl7Ui5w dXNoKHt0eXBlOlBbdGhpcy5UWVBFXSxmbjpQW3RoaXMuRk5dLG9iajpQW3RoaXMu T0JKXSxhZGp1c3Q6UFt0aGlzLk9WRVJSSURFXSxzY29wZTpQW3RoaXMuQURKX1ND T1BFXSxpbmRleDpTfSk7fX19fXJldHVybihSLmxlbmd0aCk/UjpudWxsO30sX3Vu bG9hZDpmdW5jdGlvbihUKXt2YXIgTj1ZT1NXSURHRVRTLnV0aWwuRXZlbnQsUSxQ LE8sUyxSLFU9Si5zbGljZSgpLE07Zm9yKFE9MCxTPUoubGVuZ3RoO1E8UzsrK1Ep e089VVtRXTtpZihPKXtNPXdpbmRvdztpZihPW04uQURKX1NDT1BFXSl7aWYoT1tO LkFESl9TQ09QRV09PT10cnVlKXtNPU9bTi5VTkxPQURfT0JKXTt9ZWxzZXtNPU9b Ti5BREpfU0NPUEVdO319T1tOLkZOXS5jYWxsKE0sTi5nZXRFdmVudChULE9bTi5F TF0pLE9bTi5VTkxPQURfT0JKXSk7VVtRXT1udWxsO319Tz1udWxsO009bnVsbDtK PW51bGw7aWYoSSl7Zm9yKFA9SS5sZW5ndGgtMTtQPi0xO1AtLSl7Tz1JW1BdO2lm KE8pe04ucmVtb3ZlTGlzdGVuZXIoT1tOLkVMXSxPW04uVFlQRV0sT1tOLkZOXSxQ KTt9fU89bnVsbDt9Rz1udWxsO04uX3NpbXBsZVJlbW92ZSh3aW5kb3csInVubG9h ZCIsTi5fdW5sb2FkKTt9LF9nZXRTY3JvbGxMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuX2dldFNjcm9sbCgpWzFdO30sX2dldFNjcm9sbFRvcDpmdW5jdGlvbigp e3JldHVybiB0aGlzLl9nZXRTY3JvbGwoKVswXTt9LF9nZXRTY3JvbGw6ZnVuY3Rp b24oKXt2YXIgTT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsTj1kb2N1bWVudC5i b2R5O2lmKE0mJihNLnNjcm9sbFRvcHx8TS5zY3JvbGxMZWZ0KSl7cmV0dXJuW00u c2Nyb2xsVG9wLE0uc2Nyb2xsTGVmdF07fWVsc2V7aWYoTil7cmV0dXJuW04uc2Ny b2xsVG9wLE4uc2Nyb2xsTGVmdF07fWVsc2V7cmV0dXJuWzAsMF07fX19LHJlZ0NF OmZ1bmN0aW9uKCl7fSxfc2ltcGxlQWRkOmZ1bmN0aW9uKCl7aWYod2luZG93LmFk ZEV2ZW50TGlzdGVuZXIpe3JldHVybiBmdW5jdGlvbihPLFAsTixNKXtPLmFkZEV2 ZW50TGlzdGVuZXIoUCxOLChNKSk7fTt9ZWxzZXtpZih3aW5kb3cuYXR0YWNoRXZl bnQpe3JldHVybiBmdW5jdGlvbihPLFAsTixNKXtPLmF0dGFjaEV2ZW50KCJvbiIr UCxOKTt9O31lbHNle3JldHVybiBmdW5jdGlvbigpe307fX19KCksX3NpbXBsZVJl bW92ZTpmdW5jdGlvbigpe2lmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKXty ZXR1cm4gZnVuY3Rpb24oTyxQLE4sTSl7Ty5yZW1vdmVFdmVudExpc3RlbmVyKFAs TiwoTSkpO307fWVsc2V7aWYod2luZG93LmRldGFjaEV2ZW50KXtyZXR1cm4gZnVu Y3Rpb24oTixPLE0pe04uZGV0YWNoRXZlbnQoIm9uIitPLE0pO307fWVsc2V7cmV0 dXJuIGZ1bmN0aW9uKCl7fTt9fX0oKX07fSgpOyhmdW5jdGlvbigpe3ZhciBFVT1Z T1NXSURHRVRTLnV0aWwuRXZlbnQ7RVUub249RVUuYWRkTGlzdGVuZXI7RVUub25G b2N1cz1FVS5hZGRGb2N1c0xpc3RlbmVyO0VVLm9uQmx1cj1FVS5hZGRCbHVyTGlz dGVuZXI7aWYoRVUuaXNJRSl7WU9TV0lER0VUUy51dGlsLkV2ZW50Lm9uRE9NUmVh ZHkoWU9TV0lER0VUUy51dGlsLkV2ZW50Ll90cnlQcmVsb2FkQXR0YWNoLFlPU1dJ REdFVFMudXRpbC5FdmVudCx0cnVlKTt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVt ZW50KCJwIik7RVUuX2RyaT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3RyeXtuLmRv U2Nyb2xsKCJsZWZ0Iik7Y2xlYXJJbnRlcnZhbChFVS5fZHJpKTtFVS5fZHJpPW51 bGw7RVUuX3JlYWR5KCk7bj1udWxsO31jYXRjaChleCl7fX0sRVUuUE9MTF9JTlRF UlZBTCk7fWVsc2V7aWYoRVUud2Via2l0JiZFVS53ZWJraXQ8NTI1KXtFVS5fZHJp PXNldEludGVydmFsKGZ1bmN0aW9uKCl7dmFyIHJzPWRvY3VtZW50LnJlYWR5U3Rh dGU7aWYoImxvYWRlZCI9PXJzfHwiY29tcGxldGUiPT1ycyl7Y2xlYXJJbnRlcnZh bChFVS5fZHJpKTtFVS5fZHJpPW51bGw7RVUuX3JlYWR5KCk7fX0sRVUuUE9MTF9J TlRFUlZBTCk7fWVsc2V7RVUuX3NpbXBsZUFkZChkb2N1bWVudCwiRE9NQ29udGVu dExvYWRlZCIsRVUuX3JlYWR5KTt9fUVVLl9zaW1wbGVBZGQod2luZG93LCJsb2Fk IixFVS5fbG9hZCk7RVUuX3NpbXBsZUFkZCh3aW5kb3csInVubG9hZCIsRVUuX3Vu bG9hZCk7RVUuX3RyeVByZWxvYWRBdHRhY2goKTt9KSgpO31ZT1NXSURHRVRTLnV0 aWwuRXZlbnRQcm92aWRlcj1mdW5jdGlvbigpe307WU9TV0lER0VUUy51dGlsLkV2 ZW50UHJvdmlkZXIucHJvdG90eXBlPXtfX3l1aV9ldmVudHM6bnVsbCxfX3l1aV9z dWJzY3JpYmVyczpudWxsLHN1YnNjcmliZTpmdW5jdGlvbihBLEMsRixFKXt0aGlz Ll9feXVpX2V2ZW50cz10aGlzLl9feXVpX2V2ZW50c3x8e307dmFyIEQ9dGhpcy5f X3l1aV9ldmVudHNbQV07aWYoRCl7RC5zdWJzY3JpYmUoQyxGLEUpO31lbHNle3Ro aXMuX195dWlfc3Vic2NyaWJlcnM9dGhpcy5fX3l1aV9zdWJzY3JpYmVyc3x8e307 dmFyIEI9dGhpcy5fX3l1aV9zdWJzY3JpYmVycztpZighQltBXSl7QltBXT1bXTt9 QltBXS5wdXNoKHtmbjpDLG9iajpGLG92ZXJyaWRlQ29udGV4dDpFfSk7fX0sdW5z dWJzY3JpYmU6ZnVuY3Rpb24oQyxFLEcpe3RoaXMuX195dWlfZXZlbnRzPXRoaXMu X195dWlfZXZlbnRzfHx7fTt2YXIgQT10aGlzLl9feXVpX2V2ZW50cztpZihDKXt2 YXIgRj1BW0NdO2lmKEYpe3JldHVybiBGLnVuc3Vic2NyaWJlKEUsRyk7fX1lbHNl e3ZhciBCPXRydWU7Zm9yKHZhciBEIGluIEEpe2lmKFlPU1dJREdFVFMubGFuZy5o YXNPd25Qcm9wZXJ0eShBLEQpKXtCPUImJkFbRF0udW5zdWJzY3JpYmUoRSxHKTt9 fXJldHVybiBCO31yZXR1cm4gZmFsc2U7fSx1bnN1YnNjcmliZUFsbDpmdW5jdGlv bihBKXtyZXR1cm4gdGhpcy51bnN1YnNjcmliZShBKTt9LGNyZWF0ZUV2ZW50OmZ1 bmN0aW9uKEcsRCl7dGhpcy5fX3l1aV9ldmVudHM9dGhpcy5fX3l1aV9ldmVudHN8 fHt9O3ZhciBBPUR8fHt9O3ZhciBJPXRoaXMuX195dWlfZXZlbnRzO2lmKElbR10p e31lbHNle3ZhciBIPUEuc2NvcGV8fHRoaXM7dmFyIEU9KEEuc2lsZW50KTt2YXIg Qj1uZXcgWU9TV0lER0VUUy51dGlsLkN1c3RvbUV2ZW50KEcsSCxFLFlPU1dJREdF VFMudXRpbC5DdXN0b21FdmVudC5GTEFUKTtJW0ddPUI7aWYoQS5vblN1YnNjcmli ZUNhbGxiYWNrKXtCLnN1YnNjcmliZUV2ZW50LnN1YnNjcmliZShBLm9uU3Vic2Ny aWJlQ2FsbGJhY2spO310aGlzLl9feXVpX3N1YnNjcmliZXJzPXRoaXMuX195dWlf c3Vic2NyaWJlcnN8fHt9O3ZhciBGPXRoaXMuX195dWlfc3Vic2NyaWJlcnNbR107 aWYoRil7Zm9yKHZhciBDPTA7QzxGLmxlbmd0aDsrK0Mpe0Iuc3Vic2NyaWJlKEZb Q10uZm4sRltDXS5vYmosRltDXS5vdmVycmlkZUNvbnRleHQpO319fXJldHVybiBJ W0ddO30sZmlyZUV2ZW50OmZ1bmN0aW9uKEUsRCxBLEMpe3RoaXMuX195dWlfZXZl bnRzPXRoaXMuX195dWlfZXZlbnRzfHx7fTt2YXIgRz10aGlzLl9feXVpX2V2ZW50 c1tFXTtpZighRyl7cmV0dXJuIG51bGw7fXZhciBCPVtdO2Zvcih2YXIgRj0xO0Y8 YXJndW1lbnRzLmxlbmd0aDsrK0Ype0IucHVzaChhcmd1bWVudHNbRl0pO31yZXR1 cm4gRy5maXJlLmFwcGx5KEcsQik7fSxoYXNFdmVudDpmdW5jdGlvbihBKXtpZih0 aGlzLl9feXVpX2V2ZW50cyl7aWYodGhpcy5fX3l1aV9ldmVudHNbQV0pe3JldHVy biB0cnVlO319cmV0dXJuIGZhbHNlO319OyhmdW5jdGlvbigpe3ZhciBBPVlPU1dJ REdFVFMudXRpbC5FdmVudCxDPVlPU1dJREdFVFMubGFuZztZT1NXSURHRVRTLnV0 aWwuS2V5TGlzdGVuZXI9ZnVuY3Rpb24oRCxJLEUsRil7aWYoIUQpe31lbHNle2lm KCFJKXt9ZWxzZXtpZighRSl7fX19aWYoIUYpe0Y9WU9TV0lER0VUUy51dGlsLktl eUxpc3RlbmVyLktFWURPV047fXZhciBHPW5ldyBZT1NXSURHRVRTLnV0aWwuQ3Vz dG9tRXZlbnQoImtleVByZXNzZWQiKTt0aGlzLmVuYWJsZWRFdmVudD1uZXcgWU9T V0lER0VUUy51dGlsLkN1c3RvbUV2ZW50KCJlbmFibGVkIik7dGhpcy5kaXNhYmxl ZEV2ZW50PW5ldyBZT1NXSURHRVRTLnV0aWwuQ3VzdG9tRXZlbnQoImRpc2FibGVk Iik7aWYoQy5pc1N0cmluZyhEKSl7RD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChE KTt9aWYoQy5pc0Z1bmN0aW9uKEUpKXtHLnN1YnNjcmliZShFKTt9ZWxzZXtHLnN1 YnNjcmliZShFLmZuLEUuc2NvcGUsRS5jb3JyZWN0U2NvcGUpO31mdW5jdGlvbiBI KE8sTil7aWYoIUkuc2hpZnQpe0kuc2hpZnQ9ZmFsc2U7fWlmKCFJLmFsdCl7SS5h bHQ9ZmFsc2U7fWlmKCFJLmN0cmwpe0kuY3RybD1mYWxzZTt9aWYoTy5zaGlmdEtl eT09SS5zaGlmdCYmTy5hbHRLZXk9PUkuYWx0JiZPLmN0cmxLZXk9PUkuY3RybCl7 dmFyIEosTT1JLmtleXMsTDtpZihZT1NXSURHRVRTLmxhbmcuaXNBcnJheShNKSl7 Zm9yKHZhciBLPTA7SzxNLmxlbmd0aDtLKyspe0o9TVtLXTtMPUEuZ2V0Q2hhckNv ZGUoTyk7aWYoSj09TCl7Ry5maXJlKEwsTyk7YnJlYWs7fX19ZWxzZXtMPUEuZ2V0 Q2hhckNvZGUoTyk7aWYoTT09TCl7Ry5maXJlKEwsTyk7fX19fXRoaXMuZW5hYmxl PWZ1bmN0aW9uKCl7aWYoIXRoaXMuZW5hYmxlZCl7QS5vbihELEYsSCk7dGhpcy5l bmFibGVkRXZlbnQuZmlyZShJKTt9dGhpcy5lbmFibGVkPXRydWU7fTt0aGlzLmRp c2FibGU9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe0EucmVtb3ZlTGlzdGVu ZXIoRCxGLEgpO3RoaXMuZGlzYWJsZWRFdmVudC5maXJlKEkpO310aGlzLmVuYWJs ZWQ9ZmFsc2U7fTt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIktleUxp c3RlbmVyIFsiK0kua2V5cysiXSAiK0QudGFnTmFtZSsoRC5pZD8iWyIrRC5pZCsi XSI6IiIpO307fTt2YXIgQj1ZT1NXSURHRVRTLnV0aWwuS2V5TGlzdGVuZXI7Qi5L RVlET1dOPSJrZXlkb3duIjtCLktFWVVQPSJrZXl1cCI7Qi5LRVk9e0FMVDoxOCxC QUNLX1NQQUNFOjgsQ0FQU19MT0NLOjIwLENPTlRST0w6MTcsREVMRVRFOjQ2LERP V046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6Mzcs TUVUQToyMjQsTlVNX0xPQ0s6MTQ0LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBB VVNFOjE5LFBSSU5UU0NSRUVOOjQ0LFJJR0hUOjM5LFNDUk9MTF9MT0NLOjE0NSxT SElGVDoxNixTUEFDRTozMixUQUI6OSxVUDozOH07fSkoKTtZT1NXSURHRVRTLnJl Z2lzdGVyKCJldmVudCIsWU9TV0lER0VUUy51dGlsLkV2ZW50LHt2ZXJzaW9uOiIy LjcuMCIsYnVpbGQ6IjE3OTYifSk7WU9TV0lER0VUUy5yZWdpc3RlcigieWFob28t ZG9tLWV2ZW50IixZT1NXSURHRVRTLHt2ZXJzaW9uOiIyLjcuMCIsYnVpbGQ6IjE3 OTYifSk7WU9TV0lER0VUUy51dGlsLkdldD1mdW5jdGlvbigpe3ZhciBNPXt9LEw9 MCxSPTAsRT1mYWxzZSxOPVlPU1dJREdFVFMuZW52LnVhLFM9WU9TV0lER0VUUy5s YW5nO3ZhciBKPWZ1bmN0aW9uKFcsVCxYKXt2YXIgVT1YfHx3aW5kb3csWT1VLmRv Y3VtZW50LFo9WS5jcmVhdGVFbGVtZW50KFcpO2Zvcih2YXIgViBpbiBUKXtpZihU W1ZdJiZZT1NXSURHRVRTLmxhbmcuaGFzT3duUHJvcGVydHkoVCxWKSl7Wi5zZXRB dHRyaWJ1dGUoVixUW1ZdKTt9fXJldHVybiBaO307dmFyIEk9ZnVuY3Rpb24oVCxV LFcpe3ZhciBWPVd8fCJ1dGYtOCI7cmV0dXJuIEooImxpbmsiLHsiaWQiOiJ5dWlf X2R5bl8iKyhSKyspLCJ0eXBlIjoidGV4dC9jc3MiLCJjaGFyc2V0IjpWLCJyZWwi OiJzdHlsZXNoZWV0IiwiaHJlZiI6VH0sVSk7fTt2YXIgUD1mdW5jdGlvbihULFUs Vyl7dmFyIFY9V3x8InV0Zi04IjtyZXR1cm4gSigic2NyaXB0Iix7ImlkIjoieXVp X19keW5fIisoUisrKSwidHlwZSI6InRleHQvamF2YXNjcmlwdCIsImNoYXJzZXQi OlYsInNyYyI6VH0sVSk7fTt2YXIgQT1mdW5jdGlvbihULFUpe3JldHVybnt0SWQ6 VC50SWQsd2luOlQud2luLGRhdGE6VC5kYXRhLG5vZGVzOlQubm9kZXMsbXNnOlUs cHVyZ2U6ZnVuY3Rpb24oKXtEKHRoaXMudElkKTt9fTt9O3ZhciBCPWZ1bmN0aW9u KFQsVyl7dmFyIFU9TVtXXSxWPShTLmlzU3RyaW5nKFQpKT9VLndpbi5kb2N1bWVu dC5nZXRFbGVtZW50QnlJZChUKTpUO2lmKCFWKXtRKFcsInRhcmdldCBub2RlIG5v dCBmb3VuZDogIitUKTt9cmV0dXJuIFY7fTt2YXIgUT1mdW5jdGlvbihXLFYpe3Zh ciBUPU1bV107aWYoVC5vbkZhaWx1cmUpe3ZhciBVPVQuc2NvcGV8fFQud2luO1Qu b25GYWlsdXJlLmNhbGwoVSxBKFQsVikpO319O3ZhciBDPWZ1bmN0aW9uKFcpe3Zh ciBUPU1bV107VC5maW5pc2hlZD10cnVlO2lmKFQuYWJvcnRlZCl7dmFyIFY9InRy YW5zYWN0aW9uICIrVysiIHdhcyBhYm9ydGVkIjtRKFcsVik7cmV0dXJuO31pZihU Lm9uU3VjY2Vzcyl7dmFyIFU9VC5zY29wZXx8VC53aW47VC5vblN1Y2Nlc3MuY2Fs bChVLEEoVCkpO319O3ZhciBPPWZ1bmN0aW9uKFYpe3ZhciBUPU1bVl07aWYoVC5v blRpbWVvdXQpe3ZhciBVPVQuc2NvcGV8fFQ7VC5vblRpbWVvdXQuY2FsbChVLEEo VCkpO319O3ZhciBHPWZ1bmN0aW9uKFYsWil7dmFyIFU9TVtWXTtpZihVLnRpbWVy KXtVLnRpbWVyLmNhbmNlbCgpO31pZihVLmFib3J0ZWQpe3ZhciBYPSJ0cmFuc2Fj dGlvbiAiK1YrIiB3YXMgYWJvcnRlZCI7UShWLFgpO3JldHVybjt9aWYoWil7VS51 cmwuc2hpZnQoKTtpZihVLnZhck5hbWUpe1UudmFyTmFtZS5zaGlmdCgpO319ZWxz ZXtVLnVybD0oUy5pc1N0cmluZyhVLnVybCkpP1tVLnVybF06VS51cmw7aWYoVS52 YXJOYW1lKXtVLnZhck5hbWU9KFMuaXNTdHJpbmcoVS52YXJOYW1lKSk/W1UudmFy TmFtZV06VS52YXJOYW1lO319dmFyIGM9VS53aW4sYj1jLmRvY3VtZW50LGE9Yi5n ZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLFc7aWYoVS51cmwubGVuZ3Ro PT09MCl7aWYoVS50eXBlPT09InNjcmlwdCImJk4ud2Via2l0JiZOLndlYmtpdDw0 MjAmJiFVLmZpbmFscGFzcyYmIVUudmFyTmFtZSl7dmFyIFk9UChudWxsLFUud2lu LFUuY2hhcnNldCk7WS5pbm5lckhUTUw9J1lPU1dJREdFVFMudXRpbC5HZXQuX2Zp bmFsaXplKCInK1YrJyIpOyc7VS5ub2Rlcy5wdXNoKFkpO2EuYXBwZW5kQ2hpbGQo WSk7fWVsc2V7QyhWKTt9cmV0dXJuO312YXIgVD1VLnVybFswXTtpZighVCl7VS51 cmwuc2hpZnQoKTtyZXR1cm4gRyhWKTt9aWYoVS50aW1lb3V0KXtVLnRpbWVyPVMu bGF0ZXIoVS50aW1lb3V0LFUsTyxWKTt9aWYoVS50eXBlPT09InNjcmlwdCIpe1c9 UChULGMsVS5jaGFyc2V0KTt9ZWxzZXtXPUkoVCxjLFUuY2hhcnNldCk7fUYoVS50 eXBlLFcsVixULGMsVS51cmwubGVuZ3RoKTtVLm5vZGVzLnB1c2goVyk7aWYoVS5p bnNlcnRCZWZvcmUpe3ZhciBlPUIoVS5pbnNlcnRCZWZvcmUsVik7aWYoZSl7ZS5w YXJlbnROb2RlLmluc2VydEJlZm9yZShXLGUpO319ZWxzZXthLmFwcGVuZENoaWxk KFcpO31pZigoTi53ZWJraXR8fE4uZ2Vja28pJiZVLnR5cGU9PT0iY3NzIil7RyhW LFQpO319O3ZhciBLPWZ1bmN0aW9uKCl7aWYoRSl7cmV0dXJuO31FPXRydWU7Zm9y KHZhciBUIGluIE0pe3ZhciBVPU1bVF07aWYoVS5hdXRvcHVyZ2UmJlUuZmluaXNo ZWQpe0QoVS50SWQpO2RlbGV0ZSBNW1RdO319RT1mYWxzZTt9O3ZhciBEPWZ1bmN0 aW9uKGEpe3ZhciBYPU1bYV07aWYoWCl7dmFyIFo9WC5ub2RlcyxUPVoubGVuZ3Ro LFk9WC53aW4uZG9jdW1lbnQsVz1ZLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFk IilbMF07aWYoWC5pbnNlcnRCZWZvcmUpe3ZhciBWPUIoWC5pbnNlcnRCZWZvcmUs YSk7aWYoVil7Vz1WLnBhcmVudE5vZGU7fX1mb3IodmFyIFU9MDtVPFQ7VT1VKzEp e1cucmVtb3ZlQ2hpbGQoWltVXSk7fVgubm9kZXM9W107fX07dmFyIEg9ZnVuY3Rp b24oVSxULFYpe3ZhciBYPSJxIisoTCsrKTtWPVZ8fHt9O2lmKEwlWU9TV0lER0VU Uy51dGlsLkdldC5QVVJHRV9USFJFU0g9PT0wKXtLKCk7fU1bWF09Uy5tZXJnZShW LHt0SWQ6WCx0eXBlOlUsdXJsOlQsZmluaXNoZWQ6ZmFsc2UsYWJvcnRlZDpmYWxz ZSxub2RlczpbXX0pO3ZhciBXPU1bWF07Vy53aW49Vy53aW58fHdpbmRvdztXLnNj b3BlPVcuc2NvcGV8fFcud2luO1cuYXV0b3B1cmdlPSgiYXV0b3B1cmdlImluIFcp P1cuYXV0b3B1cmdlOihVPT09InNjcmlwdCIpP3RydWU6ZmFsc2U7Uy5sYXRlcigw LFcsRyxYKTtyZXR1cm57dElkOlh9O307dmFyIEY9ZnVuY3Rpb24oYyxYLFcsVSxZ LFosYil7dmFyIGE9Ynx8RztpZihOLmllKXtYLm9ucmVhZHlzdGF0ZWNoYW5nZT1m dW5jdGlvbigpe3ZhciBkPXRoaXMucmVhZHlTdGF0ZTtpZigibG9hZGVkIj09PWR8 fCJjb21wbGV0ZSI9PT1kKXtYLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsO2EoVyxV KTt9fTt9ZWxzZXtpZihOLndlYmtpdCl7aWYoYz09PSJzY3JpcHQiKXtpZihOLndl YmtpdD49NDIwKXtYLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7 YShXLFUpO30pO31lbHNle3ZhciBUPU1bV107aWYoVC52YXJOYW1lKXt2YXIgVj1Z T1NXSURHRVRTLnV0aWwuR2V0LlBPTExfRlJFUTtULm1heGF0dGVtcHRzPVlPU1dJ REdFVFMudXRpbC5HZXQuVElNRU9VVC9WO1QuYXR0ZW1wdHM9MDtULl9jYWNoZT1U LnZhck5hbWVbMF0uc3BsaXQoIi4iKTtULnRpbWVyPVMubGF0ZXIoVixULGZ1bmN0 aW9uKGope3ZhciBmPXRoaXMuX2NhY2hlLGU9Zi5sZW5ndGgsZD10aGlzLndpbixn O2ZvcihnPTA7ZzxlO2c9ZysxKXtkPWRbZltnXV07aWYoIWQpe3RoaXMuYXR0ZW1w dHMrKztpZih0aGlzLmF0dGVtcHRzKys+dGhpcy5tYXhhdHRlbXB0cyl7dmFyIGg9 Ik92ZXIgcmV0cnkgbGltaXQsIGdpdmluZyB1cCI7VC50aW1lci5jYW5jZWwoKTtR KFcsaCk7fWVsc2V7fXJldHVybjt9fVQudGltZXIuY2FuY2VsKCk7YShXLFUpO30s bnVsbCx0cnVlKTt9ZWxzZXtTLmxhdGVyKFlPU1dJREdFVFMudXRpbC5HZXQuUE9M TF9GUkVRLG51bGwsYSxbVyxVXSk7fX19fWVsc2V7WC5vbmxvYWQ9ZnVuY3Rpb24o KXthKFcsVSk7fTt9fX07cmV0dXJue1BPTExfRlJFUToxMCxQVVJHRV9USFJFU0g6 MjAsVElNRU9VVDoyMDAwLF9maW5hbGl6ZTpmdW5jdGlvbihUKXtTLmxhdGVyKDAs bnVsbCxDLFQpO30sYWJvcnQ6ZnVuY3Rpb24oVSl7dmFyIFY9KFMuaXNTdHJpbmco VSkpP1U6VS50SWQ7dmFyIFQ9TVtWXTtpZihUKXtULmFib3J0ZWQ9dHJ1ZTt9fSxz Y3JpcHQ6ZnVuY3Rpb24oVCxVKXtyZXR1cm4gSCgic2NyaXB0IixULFUpO30sY3Nz OmZ1bmN0aW9uKFQsVSl7cmV0dXJuIEgoImNzcyIsVCxVKTt9fTt9KCk7WU9TV0lE R0VUUy5yZWdpc3RlcigiZ2V0IixZT1NXSURHRVRTLnV0aWwuR2V0LHt2ZXJzaW9u OiIyLjcuMCIsYnVpbGQ6IjE3OTYifSk7aWYodHlwZW9mIFlPU1dJREdFVFM9PT0i dW5kZWZpbmVkInx8IVlPU1dJREdFVFMpe3ZhciBZT1NXSURHRVRTPXt1dGlsOnt9 LGxhbmc6e2lzRnVuY3Rpb246ZnVuY3Rpb24oeCl7cmV0dXJuIHR5cGVvZiB4PT09 J2Z1bmN0aW9uJzt9LGlzU3RyaW5nOmZ1bmN0aW9uKHMpe3JldHVybignJytzKT09 PXMmJnR5cGVvZiBzPT09J3N0cmluZyc7fSxoYXNPd25Qcm9wZXJ0eTpmdW5jdGlv bihvLHByb3Ape2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpe3Jl dHVybiBvLmhhc093blByb3BlcnR5KHByb3ApO30KcmV0dXJuIHR5cGVvZiBvW3By b3BdIT09J3VuZGVmaW5lZCcmJm8uY29uc3RydWN0b3IucHJvdG90eXBlW3Byb3Bd IT09b1twcm9wXTt9fX07fQpZT1NXSURHRVRTLnV0aWwuQ3Jvc3NGcmFtZT0oZnVu Y3Rpb24oKXt2YXIgTUFYX1NJWkU9MjAwMCxGUkFNRVNfTlVNRVJJQz0vXmZyYW1l c1xbKFxkKylcXSQvLEZSQU1FU19OQU1FRD0vXmZyYW1lc1xbWyciXShbYS16QS1a MC05LV9dKylbJyJdXF0kLywkTD1ZT1NXSURHRVRTLmxhbmc7dmFyIGZvckVhY2g9 ZnVuY3Rpb24oYXJyLGZ1bmMpe2Zvcih2YXIgaT0wLGw9YXJyLmxlbmd0aDtpPGw7 aSsrKXtmdW5jKGFycltpXSxpKTt9fTt2YXIgbWFwUmVkdWNlPWZ1bmN0aW9uKGFy cixmdW5jLHJlcyl7Zm9yRWFjaChhcnIsZnVuY3Rpb24oaXRlbSxpbmRleCl7cmVz PWZ1bmMoaXRlbSxpbmRleCxyZXMpO30pO3JldHVybiByZXM7fTt2YXIgcGFyc2VR dWVyeVN0cmluZz1mdW5jdGlvbihzKXtyZXR1cm4gbWFwUmVkdWNlKHMuc3BsaXQo JyYnKSxmdW5jdGlvbihwYWlyLGluZGV4LHJlc3VsdCl7dmFyIGU9cGFpci5pbmRl eE9mKCc9Jyk7cmVzdWx0W3BhaXIuc3Vic3RyKDAsZSldPWRlY29kZVVSSUNvbXBv bmVudChwYWlyLnN1YnN0cihlKzEpKTtyZXR1cm4gcmVzdWx0O30se30pO307dmFy IG5vZGVUb1RhcmdldD1mdW5jdGlvbihub2RlKXtpZigkTC5pc1N0cmluZyhub2Rl KSl7cmV0dXJuIG5vZGU7fQppZihub2RlPT09d2luZG93LnBhcmVudCl7cmV0dXJu J3BhcmVudCc7fQppZihub2RlPT09d2luZG93LnRvcCl7cmV0dXJuJ3RvcCc7fQpp Zihub2RlLnRhZ05hbWUmJm5vZGUudGFnTmFtZT09PSdJRlJBTUUnJiZub2RlLmNv bnRlbnRXaW5kb3cpe2lmKG5vZGUubmFtZSE9PScnKXtyZXR1cm4iZnJhbWVzWyci K25vZGUubmFtZSsiJ10iO30KZWxzZXt2YXIgaWZyYW1lcz1kb2N1bWVudC5nZXRF bGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJyk7Zm9yKHZhciBpPTAsbD1pZnJhbWVz Lmxlbmd0aDtpPGw7aSsrKXtpZihpZnJhbWVzW2ldPT09bm9kZSl7cmV0dXJuImZy YW1lc1siK2krIl0iO319fX0KcmV0dXJuIG51bGw7fTt2YXIgdGFyZ2V0VG9Ob2Rl PWZ1bmN0aW9uKHRhcmdldCl7aWYodGFyZ2V0LnRhZ05hbWUmJnRhcmdldC50YWdO YW1lPT09J0lGUkFNRScmJnRhcmdldC5jb250ZW50V2luZG93KXtyZXR1cm4gdGFy Z2V0LmNvbnRlbnRXaW5kb3c7fQpyZXR1cm4gbWFwUmVkdWNlKHRhcmdldC5zcGxp dCgnLicpLGZ1bmN0aW9uKHBhcnQsaW5kZXgsbm9kZSl7aWYocGFydD09PSdwYXJl bnQnKXtyZXR1cm4gbm9kZS5wYXJlbnQ7fQppZihwYXJ0PT09J3RvcCcpe3JldHVy biBub2RlLnRvcDt9CnZhciBtYXRjaGVzO2lmKChtYXRjaGVzPUZSQU1FU19OVU1F UklDLmV4ZWMocGFydCl8fEZSQU1FU19OQU1FRC5leGVjKHBhcnQpKSl7cmV0dXJu IG5vZGUuZnJhbWVzW21hdGNoZXNbMV1dO30KdGhyb3cgbmV3IEVycm9yKCdJbnZh bGlkIFRhcmdldCBQYXJ0OiAnK3BhcnQpO30sd2luZG93KTt9O3ZhciBmaW5kSWZy YW1lPWZ1bmN0aW9uKHNyYyl7dmFyIGhyZWY9KCRMLmlzU3RyaW5nKHNyYykpP3Ny Yy5yZXBsYWNlKC8jJC8sJycpOmZhbHNlO3ZhciBpZnJhbWVzPWRvY3VtZW50Lmdl dEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKTtmb3IodmFyIGk9MCxsPWlmcmFt ZXMubGVuZ3RoO2k8bDtpKyspe2lmKGlmcmFtZXNbaV0uc3JjLnJlcGxhY2UoLyMk LywnJyk9PT1ocmVmfHxpZnJhbWVzW2ldLmNvbnRlbnRXaW5kb3cubG9jYXRpb249 PT1zcmMpe3JldHVybiBpZnJhbWVzW2ldO319CnJldHVybiBudWxsO307dmFyIGlz QWN0aW9uU3RyaW5nVmFsaWQ9ZnVuY3Rpb24ocyl7dmFyIHN0cmluZ3M7c3RyaW5n cz17ImNsb3NlIjoxLCJoZWlnaHQiOjEsInBob3RvLXNlbGVjdC1zdWNjZXNzIjox LCJwaG90by1zZWxlY3QtZmFpbHVyZSI6MSwic3VjY2Vzc05hbWUiOjEsInJlZnJl c2giOjEsImNjLXJlZGlyZWN0IjoxLCJjYy1jbG9zZWhpZGRlbiI6MX07cmV0dXJu IHN0cmluZ3Nbc107fQp2YXIgaXNDcnVtYlZhbGlkPWZ1bmN0aW9uKGMsd2lkZ2V0 TmFtZSl7cmV0dXJuKGM9PVlPU1dJREdFVFMuUHJvZmlsZXMuV2lkZ2V0TG9hZGVy W3dpZGdldE5hbWUrIkNydW1iIl0pO307dmFyIGlzV2lkZ2V0TmFtZVZhbGlkPWZ1 bmN0aW9uKHcpe3ZhciB3aWRnZXROYW1lczt3aWRnZXROYW1lcz17cGhvdG9waWNr ZXI6MSxuaWNrbmFtZXBpY2tlcjoxLGNvbnRhY3RjYXJkOjF9O3JldHVybiB3aWRn ZXROYW1lc1t3XTt9O3ZhciBpc01lc3NhZ2VWYWxpZD1mdW5jdGlvbihtc2cpe3Zh ciBwYXJ0cyxyZXQsd2lkZ2V0TmFtZXMsaTtpZighJEwuaXNTdHJpbmcobXNnKSly ZXR1cm4gZmFsc2U7cGFydHM9bXNnLnNwbGl0KCJ8Iik7aWYocGFydHNbMl0hPSJh Y3Rpb24iKXJldHVybiBmYWxzZTtyZXR1cm4oaXNXaWRnZXROYW1lVmFsaWQocGFy dHNbMF0pJiZpc0NydW1iVmFsaWQocGFydHNbMV0scGFydHNbMF0pJiZpc0FjdGlv blN0cmluZ1ZhbGlkKHBhcnRzWzNdKSk7fTt2YXIgX3NlbmQ7aWYod2luZG93LnBv c3RNZXNzYWdlfHxkb2N1bWVudC5wb3N0TWVzc2FnZSl7dmFyIHVzZURvY3VtZW50 PSEkTC5pc0Z1bmN0aW9uKHdpbmRvdy5wb3N0TWVzc2FnZSkmJiF3aW5kb3cuYXR0 YWNoRXZlbnQ7dmFyIG1lc3NhZ2VIYW5kbGVyPWZ1bmN0aW9uKGV2dCl7dmFyIGlm cmFtZT1maW5kSWZyYW1lKGV2dC5zb3VyY2UubG9jYXRpb258fGV2dC51cmkpO3Zh ciB1cmk7aWYoaWZyYW1lJiZpZnJhbWUuc3JjKXt1cmk9aWZyYW1lLnNyYzt9ZWxz ZXt1cmk9ZXZ0Lm9yaWdpbj9ldnQub3JpZ2luOidodHRwOi8vJytldnQuZG9tYWlu O30KdmFyIGRvbWFpbj11cmkuc3BsaXQoJy8nKVsyXTtpZihpc01lc3NhZ2VWYWxp ZChldnQuZGF0YSkpe1lPU1dJREdFVFMudXRpbC5Dcm9zc0ZyYW1lLm9uTWVzc2Fn ZUV2ZW50LmZpcmUoZXZ0LmRhdGEsZG9tYWluLHVyaSxpZnJhbWUpO319O2lmKHdp bmRvdy5hZGRFdmVudExpc3RlbmVyKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign bWVzc2FnZScsbWVzc2FnZUhhbmRsZXIsZmFsc2UpO30KZWxzZSBpZih3aW5kb3cu YXR0YWNoRXZlbnQpe3dpbmRvdy5hdHRhY2hFdmVudCgnb25tZXNzYWdlJyxtZXNz YWdlSGFuZGxlcik7fQpfc2VuZD1mdW5jdGlvbihwcm94eSx0YXJnZXQsbWVzc2Fn ZSl7dmFyIG1hdGNoZXMsdGFyZ2V0Tm9kZTt0YXJnZXROb2RlPXRhcmdldFRvTm9k ZShub2RlVG9UYXJnZXQodGFyZ2V0KSk7aWYodXNlRG9jdW1lbnQpe3RhcmdldE5v ZGU9dGFyZ2V0Tm9kZS5kb2N1bWVudDt9CmlmKCF0YXJnZXROb2RlKXt0aHJvdyBu ZXcgRXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHRhcmdldDogJyt0YXJnZXQpO30K dGFyZ2V0Tm9kZS5wb3N0TWVzc2FnZShtZXNzYWdlLHByb3h5KTt9O30KZWxzZXt2 YXIgaWZyYW1lT25sb2FkPWZ1bmN0aW9uIFgoZSxhcmdzKXt2YXIgZWw9dGhpcztZ T1NXSURHRVRTLnV0aWwuRXZlbnQucmVtb3ZlTGlzdGVuZXIoZWwsJ2xvYWQnLFgp O3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZWwucGFyZW50Tm9kZSl7 ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7fQplbD1udWxsO2lmKGFyZ3Mu bWVzc2FnZV9yZXN0KXtfc2VuZChhcmdzLnByb3h5LGFyZ3MudGFyZ2V0LGFyZ3Mu bWVzc2FnZV9yZXN0LGFyZ3Mua2V5KTt9fSwyMCk7fTtfc2VuZD1mdW5jdGlvbihw cm94eSx0YXJnZXQsbWVzc2FnZSxrZXkpe3RhcmdldD1ub2RlVG9UYXJnZXQodGFy Z2V0KTt2YXIgZWwscyxtZXNzYWdlX3Jlc3Q7aWYobWVzc2FnZS5sZW5ndGg+TUFY X1NJWkUpe21lc3NhZ2VfcmVzdD1tZXNzYWdlLnN1YnN0cihNQVhfU0laRSk7bWVz c2FnZT1tZXNzYWdlLnN1YnN0cigwLE1BWF9TSVpFKTt9CmtleT1rZXl8fChNYXRo LnJhbmRvbSgpKigxPDwzMCkpLnRvU3RyaW5nKDE2KTtlbD1kb2N1bWVudC5jcmVh dGVFbGVtZW50KCdpZnJhbWUnKTtzPWVsLnN0eWxlO3MucG9zaXRpb249J2Fic29s dXRlJztzLnZpc2liaWxpdHk9J2hpZGRlbic7cy50b3A9cy5sZWZ0PXMud2lkdGg9 cy5oZWlnaHQ9JzAnO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1lPU1dJ REdFVFMudXRpbC5FdmVudC5hZGRMaXN0ZW5lcihlbCwnbG9hZCcsaWZyYW1lT25s b2FkLHtwcm94eTpwcm94eSx0YXJnZXQ6dGFyZ2V0LG1lc3NhZ2VfcmVzdDptZXNz YWdlX3Jlc3Qsa2V5OmtleX0pO3M9J3RhcmdldD0nK2VuY29kZVVSSUNvbXBvbmVu dCh0YXJnZXQpKycma2V5PScrZW5jb2RlVVJJQ29tcG9uZW50KGtleSkrJyZtZXNz YWdlPScrZW5jb2RlVVJJQ29tcG9uZW50KG1lc3NhZ2UpKycmdXJsPScrZW5jb2Rl VVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKTtpZihtZXNz YWdlX3Jlc3Qpe3MrPScmcD0xJzt9CmVsLnNyYz1wcm94eSsnIycrczt9O30KdmFy IHByb3h5UmVjZWl2ZT1mdW5jdGlvbigpe3ZhciBocmVmPXdpbmRvdy5sb2NhdGlv bi5ocmVmLHBhcmFtcz1wYXJzZVF1ZXJ5U3RyaW5nKGhyZWYuc3Vic3RyKGhyZWYu aW5kZXhPZignIycpKzEpKTtpZigkTC5oYXNPd25Qcm9wZXJ0eShwYXJhbXMsJ3Rh cmdldCcpJiYkTC5oYXNPd25Qcm9wZXJ0eShwYXJhbXMsJ21lc3NhZ2UnKSYmJEwu aGFzT3duUHJvcGVydHkocGFyYW1zLCdrZXknKSYmJEwuaGFzT3duUHJvcGVydHko cGFyYW1zLCd1cmwnKSl7dmFyIHRhcmdldD10YXJnZXRUb05vZGUoJ3BhcmVudC4n K3BhcmFtcy50YXJnZXQpLGRvbWFpbj1wYXJhbXMudXJsLnNwbGl0KCcvJylbMl0s YnVmZmVyPXRhcmdldC5ZT1NXSURHRVRTLnV0aWwuQ3Jvc3NGcmFtZS5idWZmZXIs a2V5PXBhcmFtcy51cmwrJ3wnK3BhcmFtcy5rZXk7aWYoJEwuaGFzT3duUHJvcGVy dHkocGFyYW1zLCdwJykpe2lmKCFidWZmZXJba2V5XSl7YnVmZmVyW2tleV09W107 fQpidWZmZXJba2V5XS5wdXNoKHBhcmFtcy5tZXNzYWdlKTtyZXR1cm47fWVsc2Ug aWYoYnVmZmVyW2tleV0pe3BhcmFtcy5tZXNzYWdlPVtdLmpvaW4uY2FsbChidWZm ZXJba2V5XSwnJykrcGFyYW1zLm1lc3NhZ2U7ZGVsZXRlIGJ1ZmZlcltrZXldO30K aWYoIXRhcmdldCl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB0 YXJnZXQ6ICcrdGFyZ2V0KTt9CnRhcmdldC5ZT1NXSURHRVRTLnV0aWwuQ3Jvc3NG cmFtZS5fcmVjZWl2ZShwYXJhbXMubWVzc2FnZSxkb21haW4scGFyYW1zLnVybCk7 fWVsc2V7dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIHBhcmFtczog Jytsb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7fX07dmFyIENyb3NzRnJhbWU7aWYo WU9TV0lER0VUUy51dGlsLkN1c3RvbUV2ZW50KXtDcm9zc0ZyYW1lPXtvbk1lc3Nh Z2VFdmVudDpuZXcgWU9TV0lER0VUUy51dGlsLkN1c3RvbUV2ZW50KCdvbk1lc3Nh Z2UnKSxidWZmZXI6e30sc2VuZDpfc2VuZCxfcmVjZWl2ZTpmdW5jdGlvbihtZXNz YWdlLGRvbWFpbix1cmkpe2lmKGlzTWVzc2FnZVZhbGlkKG1lc3NhZ2UpKXtZT1NX SURHRVRTLnV0aWwuQ3Jvc3NGcmFtZS5vbk1lc3NhZ2VFdmVudC5maXJlKG1lc3Nh Z2UsZG9tYWluLHVyaSxmaW5kSWZyYW1lKHVyaSkpO319LHByb3h5UmVjZWl2ZTpw cm94eVJlY2VpdmV9O30KZWxzZXtDcm9zc0ZyYW1lPXtwcm94eVJlY2VpdmU6cHJv eHlSZWNlaXZlfTt9CnJldHVybiBDcm9zc0ZyYW1lO30pKCk7WU9TV0lER0VUUy5u YW1lc3BhY2UoIlByb2ZpbGVzIik7WU9TV0lER0VUUy5Qcm9maWxlcy5XaWRnZXRM b2FkZXI9ZnVuY3Rpb24oKXt2YXIgd2lkZ2V0Q29uZmlnLHdpZGdldE5hbWUsZmls ZXNNYXAsRG9tLEV2ZW50LEdldCxiYXNlUGF0aDtEb209WU9TV0lER0VUUy51dGls LkRvbTtFdmVudD1ZT1NXSURHRVRTLnV0aWwuRXZlbnQ7R2V0PVlPU1dJREdFVFMu dXRpbC5HZXQ7YmFzZVBhdGg9WU9TV0lER0VUUy5Qcm9maWxlcy53aWRnZXRIb3N0 UGF0aHx8Imh0dHA6Ly93aWRnZXRzLnByb2ZpbGVzLnlhaG9vLmNvbS8iO2ZpbGVz TWFwPXtwaG90b1BpY2tlcjpbImpzL3BpY2tlcnMud2lkZ2V0LmpzIl0sbmlja25h bWVQaWNrZXI6WyJqcy9waWNrZXJzLndpZGdldC5qcyJdLGNvbnRhY3RDYXJkOlsi b25lL2NvbnRhY3RjYXJkL2pzL2NvbnRhY3RjYXJkLndpZGdldC5qcyJdfTtmdW5j dGlvbiBsb2FkV2lkZ2V0KGUpe0V2ZW50LnByZXZlbnREZWZhdWx0KGUpO2lmKHR5 cGVvZiBZT1NXSURHRVRTLlByb2ZpbGVzLldpZGdldHNbd2lkZ2V0TmFtZV0uaW5p dD09PSJ1bmRlZmluZWQiKXtHZXQuc2NyaXB0KGJhc2VQYXRoK2ZpbGVzTWFwW3dp ZGdldE5hbWVdLHtvblN1Y2Nlc3M6ZnVuY3Rpb24oKXtZT1NXSURHRVRTLlByb2Zp bGVzLldpZGdldHNbd2lkZ2V0TmFtZV0uaW5pdCh3aWRnZXRDb25maWcpO319KTt9 CmVsc2V7WU9TV0lER0VUUy5Qcm9maWxlcy5XaWRnZXRzW3dpZGdldE5hbWVdLmlu aXQod2lkZ2V0Q29uZmlnKTt9fQpmdW5jdGlvbiBzZXRVcFdpZGdldHMoKXt2YXIg bGlua3MsbGlua3NMZW4saTtzd2l0Y2god2lkZ2V0TmFtZSl7Y2FzZSJwaG90b1Bp Y2tlciI6bGlua3M9RG9tLmdldEVsZW1lbnRzQnlDbGFzc05hbWUod2lkZ2V0Q29u ZmlnLmNoYW5nZVBob3RvTGluayk7bGlua3NMZW49bGlua3MubGVuZ3RoO2Zvcihp PTA7aTxsaW5rc0xlbjtpKyspe0V2ZW50Lm9uKGxpbmtzW2ldLCJjbGljayIsbG9h ZFdpZGdldCx7fSx0cnVlKTt9CmJyZWFrO2Nhc2Uibmlja25hbWVQaWNrZXIiOmxp bmtzPURvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHdpZGdldENvbmZpZy5uYW1l UGlja2VyQ2xhc3MpO2xpbmtzTGVuPWxpbmtzLmxlbmd0aDtmb3IoaT0wO2k8bGlu a3NMZW47aSsrKXtFdmVudC5vbihsaW5rc1tpXSwiY2xpY2siLGxvYWRXaWRnZXQs e30sdHJ1ZSk7fQpicmVhaztjYXNlImNvbnRhY3RDYXJkIjppZih3aWRnZXRDb25m aWcuY29udGFjdGNhcmRlZGl0ZWQ9PTEpe0V2ZW50Lm9uRE9NUmVhZHkobG9hZFdp ZGdldCk7fQpsaW5rcz1Eb20uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh3aWRnZXRD b25maWcuY29udGFjdENhcmRDbGFzcyk7bGlua3NMZW49bGlua3MubGVuZ3RoO2Zv cihpPTA7aTxsaW5rc0xlbjtpKyspe0V2ZW50Lm9uKGxpbmtzW2ldLCJjbGljayIs bG9hZFdpZGdldCx7fSx0cnVlKTt9CmJyZWFrO2RlZmF1bHQ6YnJlYWs7fX0KZnVu Y3Rpb24gbG9hZCh3TmFtZSx3Q29uZil7d2lkZ2V0Q29uZmlnPXdDb25mO3dpZGdl dE5hbWU9d05hbWU7WU9TV0lER0VUUy5Qcm9maWxlcy5XaWRnZXRMb2FkZXJbd05h bWUudG9Mb3dlckNhc2UoKSsiQ3J1bWIiXT13aWRnZXRDb25maWcucGlja2VyQ3J1 bWI7WU9TV0lER0VUUy5uYW1lc3BhY2UoIlByb2ZpbGVzLldpZGdldHMuIit3aWRn ZXROYW1lKTtpZih0eXBlb2YgWU9TV0lER0VUUy5Qcm9maWxlcy5XaWRnZXRzW3dp ZGdldE5hbWVdKXtzZXRVcFdpZGdldHMoKTt9fQpyZXR1cm57bG9hZDpsb2FkfTt9 O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnRhYlZpZXc9ZnVuY3Rpb24oKXt2YXIgQ3Nz PVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNzcy50YWJWaWV3LFl1ZD1ZQUhPTy51dGls LkRvbSxZdWU9WUFIT08udXRpbC5FdmVudDtmdW5jdGlvbiBjcmVhdGVUYWJzKGVs KXt2YXIgbmF2PVl1ZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENzcy5oZENsYXNz LCd1bCcsZWwpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnRhYkNoYW5nZS5zdWJzY3Jp YmUoc2hvd1RhYik7aWYobmF2Lmxlbmd0aD4wKXtZdWUub24obmF2WzBdLCdjbGlj aycsdGFiTmF2aWdhdGlvbik7fQp2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ3lhbi1hc2stYWxsY2F0cycpO2lmKGVsKXtZdWUub24oZWwsJ2NsaWNrJyx0 YWJOYXZpZ2F0aW9uKTt9CnZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn eWFuLWFzay1hdXRvY2F0Jyk7aWYoZWwpe1l1ZS5vbihlbCwnY2xpY2snLHRhYk5h dmlnYXRpb24pO319CmZ1bmN0aW9uIHRhYk5hdmlnYXRpb24oZSl7dmFyIGVsPVl1 ZS5nZXRUYXJnZXQoZSk7aWYoZSl7dGFyZ2V0PShlbC5ub2RlTmFtZS50b0xvd2Vy Q2FzZSgpPT0nYSc/ZWw6WXVkLmdldEFuY2VzdG9yQnlUYWdOYW1lKGVsLCdhJykp O2lmKHRhcmdldCl7dmFyIGlkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdl dC5ocmVmLnJlcGxhY2UoLy4qIy8sJycpKTtpZihpZCl7WXVlLnByZXZlbnREZWZh dWx0KGUpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLnRhYkNoYW5nZS5maXJlKHRhcmdl dCk7fX19fQpmdW5jdGlvbiBzaG93VGFiKHNUeXBlLGFBcmdzKXt2YXIgdGFyZ2V0 PWFBcmdzWzBdO3ZhciBpZD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQu aHJlZi5yZXBsYWNlKC8uKiMvLCcnKSk7aWYoaWQpe1l1ZC5yZW1vdmVDbGFzcyhp ZCxDc3MuaGlkZUNsYXNzKTt2YXIgaGQ9WXVkLmdldEVsZW1lbnRzQnlDbGFzc05h bWUoJ2hkJywndWwnLGlkLnBhcmVudE5vZGUucGFyZW50Tm9kZSlbMF07WXVkLnJl cGxhY2VDbGFzcyhZdWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDc3Muc2hvd0Ns YXNzLCdsaScsaGQpLENzcy5zaG93Q2xhc3MsQ3NzLmhpZGVDbGFzcyk7dmFyIHRh Yj1ZdWQuZ2V0RWxlbWVudHNCeShmdW5jdGlvbihlbCl7aWYoZWwuZ2V0RWxlbWVu dHNCeVRhZ05hbWUoJ2EnKVswXS5ocmVmLnJlcGxhY2UoLy4qIy8sJycpPT10YXJn ZXQuaHJlZi5yZXBsYWNlKC8uKiMvLCcnKSl7cmV0dXJuIHRydWU7fQpyZXR1cm4g ZmFsc2U7fSwnbGknLGhkKTtZdWQucmVwbGFjZUNsYXNzKHRhYixDc3MuaGlkZUNs YXNzLENzcy5zaG93Q2xhc3MpO1l1ZC5yZXBsYWNlQ2xhc3MoWXVkLmdldEVsZW1l bnRzQnlDbGFzc05hbWUoQ3NzLnNob3dDbGFzcywnZGl2JyxpZC5wYXJlbnROb2Rl KSxDc3Muc2hvd0NsYXNzLENzcy5oaWRlQ2xhc3MpO1l1ZC5yZXBsYWNlQ2xhc3Mo aWQsQ3NzLmhpZGVDbGFzcyxDc3Muc2hvd0NsYXNzKTt9fQpyZXR1cm57aW5pdDpm dW5jdGlvbigpe3ZhciBlbHM9WXVkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ3Nz LnRhYkNsYXNzKTtpZihlbHMubGVuZ3RoPjApe2Zvcih2YXIgaT0wLGw9ZWxzLmxl bmd0aDtpPGw7aSsrKXtjcmVhdGVUYWJzKGVsc1tpXSk7fX19LGFkZFRhYkV2ZW50 OmZ1bmN0aW9uKGVsKXtpZihlbCl7WXVlLm9uKGVsLCdjbGljaycsdGFiTmF2aWdh dGlvbik7fX0sc2hvd1RhYjpmdW5jdGlvbihlbCl7WUFIT08uU2VhcmNoLkFuc3dl cnMudGFiQ2hhbmdlLmZpcmUoZWwpO319O30oKTtZQUhPTy5TZWFyY2guQW5zd2Vy cy5kb21Db2xsYXBzZT1mdW5jdGlvbigpe3ZhciBjc3M9WUFIT08uU2VhcmNoLkFu c3dlcnMuY3NzLmRvbUNvbGxhcHNlO2Z1bmN0aW9uIHRvZ2dsZShlKXt2YXIgcGFy ZW50PVlBSE9PLnV0aWwuRG9tLmhhc0NsYXNzKHRoaXMsY3NzLnRyaWdnZXJDbGFz cyk/dGhpczp0aGlzLnBhcmVudE5vZGU7dmFyIGlkPXRoaXMuaHJlZi5yZXBsYWNl KC8uKiMvLCcnKTtZQUhPTy5sb2coaWQpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1l bnRCeUlkKGlkKTtpZih0IT09dW5kZWZpbmVkKXtpZihZQUhPTy51dGlsLkRvbS5o YXNDbGFzcyh0LGNzcy5oaWRlQ2xhc3MpKXtZQUhPTy51dGlsLkRvbS5yZW1vdmVD bGFzcyh0LGNzcy5oaWRlQ2xhc3MpO1lBSE9PLnV0aWwuRG9tLnJlcGxhY2VDbGFz cyhwYXJlbnQsY3NzLnBhcmVudENsYXNzLGNzcy5vcGVuQ2xhc3MpO31lbHNle1lB SE9PLnV0aWwuRG9tLmFkZENsYXNzKHQsY3NzLmhpZGVDbGFzcyk7WUFIT08udXRp bC5Eb20ucmVwbGFjZUNsYXNzKHBhcmVudCxjc3Mub3BlbkNsYXNzLGNzcy5wYXJl bnRDbGFzcyk7fTtZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUpO307 fQpmdW5jdGlvbiBnZXROZXh0KG8pe3ZhciB0PW8ubmV4dFNpYmxpbmc7aWYodCl7 d2hpbGUodC5ub2RlVHlwZSE9PTEmJnQubmV4dFNpYmxpbmcpe3Q9dC5uZXh0U2li bGluZzt9fQpyZXR1cm4gdDt9CnJldHVybntpbml0OmZ1bmN0aW9uKCl7aWYodHlw ZW9mKGNzcykhPT0ndW5kZWZpbmVkJyl7dmFyIGJvb2ttYXJrPXdpbmRvdy5sb2Nh dGlvbi5oYXNoLnJlcGxhY2UoJyMnLCcnKTt2YXIgZWxtcz1ZQUhPTy51dGlsLkRv bS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNzcy50cmlnZ2VyQ2xhc3MpO2Zvcih2 YXIgaT0wLGo9ZWxtcy5sZW5ndGg7aTxqO2krKyl7aWYoZWxtc1tpXS5ub2RlTmFt ZS50b0xvd2VyQ2FzZSgpIT09J2EnKXt2YXIgdD1nZXROZXh0KGVsbXNbaV0pO2lm KHQpe3ZhciBuZXdJRD10LmlkfHxZQUhPTy51dGlsLkRvbS5nZW5lcmF0ZUlkKCk7 dC5zZXRBdHRyaWJ1dGUoJ2lkJyxuZXdJRCk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgnYScpO2Euc2V0QXR0cmlidXRlKCdocmVmJywnIycrbmV3SUQpO3Zh ciBjPWVsbXNbaV0uaW5uZXJIVE1MO2EuaW5uZXJIVE1MPWVsbXNbaV0uaW5uZXJI VE1MO2VsbXNbaV0uaW5uZXJIVE1MPScnO2VsbXNbaV0uYXBwZW5kQ2hpbGQoYSk7 aWYobmV3SUQhPT1ib29rbWFyayl7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3MoZWxt c1tpXSxjc3Mub3BlbkNsYXNzKTtZQUhPTy51dGlsLkRvbS5hZGRDbGFzcyh0LGNz cy5vcGVuQ2xhc3MpO31lbHNle1lBSE9PLnV0aWwuRG9tLmFkZENsYXNzKGVsbXNb aV0sY3NzLmhpZGVDbGFzcyk7WUFIT08udXRpbC5Eb20ucmVtb3ZlQ2xhc3ModCxj c3Mub3BlbkNsYXNzKTt9O1lBSE9PLnV0aWwuRXZlbnQub24oYSwnY2xpY2snLHRv Z2dsZSk7fTt9ZWxzZXt2YXIgbmV3SUQ9ZWxtc1tpXS5ocmVmLnJlcGxhY2UoLy4q Iy8sJycpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5ld0lEKXx8Z2V0 TmV4dChlbG1zW2ldKTtpZih0IT09bnVsbCl7aWYodC5pZCE9PW5ld0lEKXtuZXdJ RD10LmlkO2VsbXNbaV0uc2V0QXR0cmlidXRlKCdocmVmJywnIycrbmV3SUQpO307 aWYobmV3SUQhPT1ib29rbWFyayl7WUFIT08udXRpbC5Eb20uYWRkQ2xhc3MoZWxt c1tpXSxjc3MucGFyZW50Q2xhc3MpO31lbHNle1lBSE9PLnV0aWwuRG9tLmFkZENs YXNzKGVsbXNbaV0sY3NzLmhpZGVDbGFzcyk7fTtZQUhPTy51dGlsLkV2ZW50Lm9u KGVsbXNbaV0sJ2NsaWNrJyx0b2dnbGUpO307fTt9O307fX07fSgpO1lBSE9PLlNl YXJjaC5BbnN3ZXJzLnNpbXBsZVJhdGVyPWZ1bmN0aW9uKCl7dmFyIGxhYmVsQ29u dGFpbmVycyxsYWJlbENvbnRhaW5lcnNMZW5ndGg7dmFyIHJhdGVkPTA7dmFyIGxh YmVscz1bXTt2YXIgY2xpY2tlZEVsO3ZhciBjb25maWc7dmFyIHNldFRleHQ9ZnVu Y3Rpb24ocmF0aW5nKXt2YXIgcmF0aW5nVGV4dCxyYXRpbmdUZXh0RWw9ZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoY29uZmlnLnJhdGluZ1RleHRFbElkKTtpZighcmF0 aW5nKXtyYXRpbmdUZXh0PSIiO1lBSE9PLnV0aWwuRG9tLnNldFN0eWxlKHJhdGlu Z1RleHRFbCwidmlzaWJpbGl0eSIsImhpZGRlbiIpfWVsc2V7cmF0aW5nVGV4dD1s YWJlbHNbcmF0aW5nXTtZQUhPTy51dGlsLkRvbS5zZXRTdHlsZShyYXRpbmdUZXh0 RWwsInZpc2liaWxpdHkiLCJ2aXNpYmxlIik7fQpyYXRpbmdUZXh0RWwuZ2V0RWxl bWVudHNCeVRhZ05hbWUoInNwYW4iKVswXS5pbm5lckhUTUw9cmF0aW5nVGV4dDt9 O3ZhciBzd2FwU3RhcnM9ZnVuY3Rpb24oZXZlbnRUeXBlLHJhdGluZyl7dmFyIGlt Z0VsLGRpdklkLGRpdlJhdGluZztmb3IodmFyIGk9MDtpPGxhYmVsQ29udGFpbmVy c0xlbmd0aDtpKyspe2RpdklkPWxhYmVsQ29udGFpbmVyc1tpXS5pZDtkaXZSYXRp bmc9ZGl2SWQuY2hhckF0KGRpdklkLmxlbmd0aC0xKTtpZihkaXZSYXRpbmc8PXJh dGluZyl7aW1nRWw9bGFiZWxDb250YWluZXJzW2ldLmdldEVsZW1lbnRzQnlUYWdO YW1lKCJpbWciKVswXTtpZihldmVudFR5cGU9PT0ibW91c2VvdmVyInx8ZXZlbnRU eXBlPT09ImZvY3VzIil7aW1nRWwuc3JjPWNvbmZpZy5zdGFySG92ZXJVUkw7fWVs c2V7aW1nRWwuc3JjPWNvbmZpZy5zdGFyT25VUkw7fX1lbHNle2ltZ0VsPWxhYmVs Q29udGFpbmVyc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIilbMF07aW1n RWwuc3JjPWNvbmZpZy5zdGFyT2ZmVVJMO319fTt2YXIgc2V0U3RhclJhdGluZz1m dW5jdGlvbihlKXtZQUhPTy51dGlsLkV2ZW50LnByZXZlbnREZWZhdWx0KGUpO3Zh ciBjdXJyZW50RWw9WUFIT08udXRpbC5FdmVudC5nZXRUYXJnZXQoZSk7aWYoY3Vy cmVudEVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0naW1nJyl7Y3VycmVudEVs PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGN1cnJlbnRFbC5wYXJlbnROb2RlLmh0 bWxGb3IpO30KaWYoY3VycmVudEVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0n bGFiZWwnKXtjdXJyZW50RWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY3VycmVu dEVsLmh0bWxGb3IpO30KaWYoY3VycmVudEVsLm5vZGVOYW1lLnRvTG93ZXJDYXNl KCk9PT0naW5wdXQnKXt2YXIgcmF0aW5nPWN1cnJlbnRFbC52YWx1ZTtpZigoZS50 eXBlPT09Im1vdXNlb3ZlciIpJiYoKGN1cnJlbnRFbCE9PWNsaWNrZWRFbCl8fCFy YXRlZCkpe3N3YXBTdGFycygibW91c2VvdmVyIixyYXRpbmcpO30KaWYoZS50eXBl PT09ImNsaWNrInx8ZS50eXBlPT09ImZvY3VzIil7c3dhcFN0YXJzKCJjbGljayIs cmF0aW5nKTtjdXJyZW50RWwuY2hlY2tlZD10cnVlO3JhdGVkPXJhdGluZztjbGlj a2VkRWw9Y3VycmVudEVsO30Kc2V0VGV4dChyYXRpbmcpO319O3ZhciByZXNldFN0 YXJSYXRpbmc9ZnVuY3Rpb24oZSl7Zm9yKHZhciBpPTA7aTxsYWJlbENvbnRhaW5l cnNMZW5ndGg7aSsrKXt2YXIgaW1nRWw9bGFiZWxDb250YWluZXJzW2ldLmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJpbWciKVswXTtpZihpPHJhdGVkKXtpbWdFbC5zcmM9 Y29uZmlnLnN0YXJPblVSTDt9CmVsc2V7aW1nRWwuc3JjPWNvbmZpZy5zdGFyT2Zm VVJMO319CnNldFRleHQocmF0ZWQpO307dmFyIGluaXQ9ZnVuY3Rpb24obXNnLGFy Z3MsY2ZnKXtjb25maWc9e3JhdGluZ0NvbnRhaW5lckVsSWQ6Y2ZnJiZjZmcucmF0 aW5nQ29udGFpbmVyRWxJZHx8ImFuc3dlci1yYXRpbmciLHJhdGluZ1RleHRFbElk OmNmZyYmY2ZnLnJhdGluZ1RleHRFbElkfHwicmF0aW5nLXRleHQiLHN0YXJPblVS TDpjZmcmJmNmZy5zdGFyT25VUkx8fCJodHRwOi8vbC55aW1nLmNvbS9oLzI4MTMw L2ltYWdlcy9hbGwvY2JhLXN0YXItb24tMzIucG5nIixzdGFyT2ZmVVJMOmNmZyYm Y2ZnLnN0YXJPZmZVUkx8fCJodHRwOi8vbC55aW1nLmNvbS9oLzI4MTMwL2ltYWdl cy9hbGwvY2JhLXN0YXItb2ZmLTMyLnBuZyIsc3RhckhvdmVyVVJMOmNmZyYmY2Zn LnN0YXJIb3ZlclVSTHx8Imh0dHA6Ly9sLnlpbWcuY29tL2gvMjgxMzAvaW1hZ2Vz L2FsbC9jYmEtc3Rhci1ob3Zlci0zMi5wbmciLGZlZWRiYWNrVHh0QXJlYUVsSWQ6 Y2ZnJiZjZmcuZmVlZGJhY2tUeHRBcmVhRWxJZHx8Inlhbi1iZXN0YW5zd2VyLWZl ZWRiYWNrIn0KdmFyIHJhdGluZ1RleHQscmVvcmRlcmVkTGFiZWxDb250YWluZXJz PVtdO2lmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb25maWcucmF0aW5nQ29u dGFpbmVyRWxJZCkpe3JldHVybjt9CnZhciByYXRpbmdDb250YWluZXJFbD1kb2N1 bWVudC5nZXRFbGVtZW50QnlJZChjb25maWcucmF0aW5nQ29udGFpbmVyRWxJZCk7 bGFiZWxDb250YWluZXJzPXJhdGluZ0NvbnRhaW5lckVsLmdldEVsZW1lbnRzQnlU YWdOYW1lKCJkaXYiKQppZighbGFiZWxDb250YWluZXJzLmxlbmd0aCl7bGFiZWxD b250YWluZXJzPXJhdGluZ0NvbnRhaW5lckVsLmdldEVsZW1lbnRzQnlUYWdOYW1l KCJsaSIpO30KbGFiZWxDb250YWluZXJzTGVuZ3RoPWxhYmVsQ29udGFpbmVycy5s ZW5ndGg7Zm9yKHZhciBjPTA7YzxsYWJlbENvbnRhaW5lcnNMZW5ndGg7YysrKXt2 YXIgY3VycmVudExhYmVsPWxhYmVsQ29udGFpbmVyc1tjXS5nZXRFbGVtZW50c0J5 VGFnTmFtZSgibGFiZWwiKVswXTtyYXRpbmdUZXh0PWN1cnJlbnRMYWJlbC5maXJz dENoaWxkLm5vZGVWYWx1ZTtsYWJlbHNbbGFiZWxDb250YWluZXJzTGVuZ3RoLWNd PXJhdGluZ1RleHQ7cmVvcmRlcmVkTGFiZWxDb250YWluZXJzW2xhYmVsQ29udGFp bmVyc0xlbmd0aC0xLWNdPWxhYmVsQ29udGFpbmVyc1tjXTt9CmZvcih2YXIgeD0w O3g8bGFiZWxDb250YWluZXJzTGVuZ3RoO3grKyl7cmF0aW5nQ29udGFpbmVyRWwu YXBwZW5kQ2hpbGQocmVvcmRlcmVkTGFiZWxDb250YWluZXJzW3hdKTt9CmZvcih2 YXIgaT0wO2k8bGFiZWxDb250YWluZXJzTGVuZ3RoO2krKyl7dmFyIGxhYmVsPWxh YmVsQ29udGFpbmVyc1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGFiZWwiKVsw XTtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZChsYWJlbC5odG1sRm9yKS5jaGVj a2VkKXtyYXRlZD1pKzE7fQpyYXRpbmdUZXh0PWxhYmVsLmZpcnN0Q2hpbGQubm9k ZVZhbHVlO2xhYmVsLmlubmVySFRNTD0iIjt2YXIgaW1nRWw9ZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgiaW1nIik7aW1nRWwuc3JjPWNvbmZpZy5zdGFyT2ZmVVJMO2lt Z0VsLmFsdD1yYXRpbmdUZXh0O2xhYmVsLmFwcGVuZENoaWxkKGltZ0VsKTtZQUhP Ty51dGlsLkV2ZW50LmFkZExpc3RlbmVyKGxhYmVsLCdtb3VzZW92ZXInLHNldFN0 YXJSYXRpbmcpO1lBSE9PLnV0aWwuRXZlbnQuYWRkTGlzdGVuZXIobGFiZWwsJ21v dXNlb3V0JyxyZXNldFN0YXJSYXRpbmcpO1lBSE9PLnV0aWwuRXZlbnQuYWRkTGlz dGVuZXIobGFiZWwsJ2NsaWNrJyxzZXRTdGFyUmF0aW5nKTtZQUhPTy51dGlsLkV2 ZW50LmFkZExpc3RlbmVyKGxhYmVsLmh0bWxGb3IsJ2ZvY3VzJyxzZXRTdGFyUmF0 aW5nKTtZQUhPTy51dGlsLkV2ZW50LmFkZExpc3RlbmVyKGxhYmVsLmh0bWxGb3Is J2NsaWNrJyxzZXRTdGFyUmF0aW5nKTt9CnZhciByYXRpbmdUZXh0UGFyYT1kb2N1 bWVudC5jcmVhdGVFbGVtZW50KCJwIik7dmFyIHJhdGluZ1RleHRTcGFuPWRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyYXRpbmdUZXh0UGFyYS5pZD1jb25m aWcucmF0aW5nVGV4dEVsSWQ7cmF0aW5nVGV4dFBhcmEuYXBwZW5kQ2hpbGQocmF0 aW5nVGV4dFNwYW4pO1lBSE9PLnV0aWwuRG9tLmluc2VydEFmdGVyKHJhdGluZ1Rl eHRQYXJhLHJhdGluZ0NvbnRhaW5lckVsKTtyZXNldFN0YXJSYXRpbmcoKTt9O3Jl dHVybntpbml0OmluaXR9O30oKTtZQUhPTy5uYW1lc3BhY2UoJ1lBSE9PLlNlYXJj aC5BbnN3ZXJzLlByb2ZpbGVzJyk7WUFIT08uU2VhcmNoLkFuc3dlcnMuUHJvZmls ZXMuWU9TV2lkZ2V0cz1mdW5jdGlvbigpe3ZhciBZVUQ9WUFIT08udXRpbC5Eb207 dmFyIG5pY2tuYW1lQ29uZixwaG90b1BpY2tlckNvbmYseW9zQ3J1bWI7dmFyIHBy b3h5VXJsPSdodHRwOi8vJytkb2N1bWVudC5kb21haW4rJzonK3dpbmRvdy5sb2Nh dGlvbi5wb3J0KycveW9zX2ZlX3Byb3h5L3Byb3h5Lmh0bWwnO2Z1bmN0aW9uIGNh bGxiYWNrU3VjY2VzcyhvKXtpZihvLnJlc3BvbnNlVGV4dCl7dmFyIGRhdGE9WUFI T08ubGFuZy5KU09OLnBhcnNlKG8ucmVzcG9uc2VUZXh0KTtpZihkYXRhLnN0YXR1 cyYmZGF0YS5zdGF0dXMudXNlcj09J3VwZGF0ZWQnKXtyZXR1cm4gdHJ1ZTt9fQpy ZXR1cm4gZmFsc2U7fQpmdW5jdGlvbiBjYWxsYmFja0ZhaWwobyl7cmV0dXJuIGZh bHNlO30KZnVuY3Rpb24gdXBkYXRlUGhvdG9UeXBlKCl7dmFyIHBob3RvVHlwZT1Z VUQuZ2V0KCdwaG90by10eXBlJyk7dmFyIGNydW1iPVlVRC5nZXQoJ2NydW1iJyk7 aWYoY3J1bWImJnBob3RvVHlwZSYmcGhvdG9UeXBlLnZhbHVlPT0ndXBkYXRlJykK e3ZhciBjYWxsYmFjaz17c3VjY2VzczpjYWxsYmFja1N1Y2Nlc3MsZmFpbHVyZTpj YWxsYmFja0ZhaWx9O3JlcXVlc3RQaWN0dXJlVXBkYXRlPVlBSE9PLnV0aWwuQ29u bmVjdC5hc3luY1JlcXVlc3QoJ1BPU1QnLCcvbXktYWN0aXZpdHkvZWRpdC9hYm91 dC9jaGFuZ2UtcGljdHVyZScsY2FsbGJhY2ssJ2NydW1iPScrY3J1bWIudmFsdWUp O319CmZ1bmN0aW9uIGhhbmRsZVBob3RvQ2hhbmdlKHR5cGUsYXJncyxjYWxsYmFj a0RhdGEpe2lmKHR5cGU9PT0iUGhvdG9DaGFuZ2VTdWNjZXNzIil7aWYoZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoInlvcy1waG90byIpLnNyYyE9PWFyZ3NbMF0uaW1n VXJsKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieW9zLXBob3RvIikuc3JjPWFy Z3NbMF0uaW1nVXJsO3VwZGF0ZVBob3RvVHlwZSgpO319ZWxzZSBpZih0eXBlPT09 IlBob3RvQ2hhbmdlRmFpbHVyZSIpe3JldHVybiBmYWxzZTt9fQpmdW5jdGlvbiBo YW5kbGVOYW1lQ2hhbmdlKHR5cGUsYXJncyxjYWxsYmFja0RhdGEpe2lmKHR5cGU9 PT0iTmlja25hbWVDaGFuZ2VTdWNjZXNzIil7WVVELmdldCgieW9zLW5pY2tuYW1l IikuaW5uZXJIVE1MPWFyZ3NbMF07fWVsc2UgaWYodHlwZT09PSJOaWNrbmFtZUNo YW5nZUZhaWx1cmUiKXtyZXR1cm4gZmFsc2U7fX0KZnVuY3Rpb24gbG9hZEl0KCl7 eW9zQ3J1bWI9WUFIT08udXRpbC5Eb20uZ2V0KCJ5b3MtY3J1bWIiKS52YWx1ZTtu aWNrbmFtZUNvbmY9e3pJbmRleDoiMTAwIixuYW1lUGlja2VyQ2xhc3M6Inlvcy1u aWNrbmFtZS1waWNrZXIiLHByb3h5VXJsOnByb3h5VXJsLHBpY2tlckNydW1iOnlv c0NydW1iLG5pY2tuYW1lQ2hhbmdlU3VjY2Vzczp7Zm46aGFuZGxlTmFtZUNoYW5n ZSxkYXRhOnthOiJpbnB1dCBwYXJhbWV0ZXIifX0sbmlja25hbWVDaGFuZ2VGYWls dXJlOntmbjpoYW5kbGVOYW1lQ2hhbmdlLGRhdGE6e2E6ImlucHV0IHBhcmFtZXRl ciJ9fX07cGhvdG9QaWNrZXJDb25mPXt0blNpemU6InRuNDgiLGF2U2l6ZToibWVk aXVtIixjaGFuZ2VQaG90b0xpbms6Inlvcy1waG90by1waWNrZXIiLHByb3h5VXJs OnByb3h5VXJsLHBpY2tlckNydW1iOnlvc0NydW1iLHBob3RvQ2hhbmdlU3VjY2Vz czp7Zm46aGFuZGxlUGhvdG9DaGFuZ2UsZGF0YTp7YToiaW5wdXQgcGFyYW1ldGVy In19LHBob3RvQ2hhbmdlRmFpbHVyZTp7Zm46aGFuZGxlUGhvdG9DaGFuZ2UsZGF0 YTp7YToiaW5wdXQgcGFyYW1ldGVyIn19fTt9CnJldHVybntpbml0OmZ1bmN0aW9u KCl7aWYoWUFIT08udXRpbC5Eb20uZ2V0KCd5b3MtY3J1bWInKSl7bG9hZEl0KCk7 dmFyIG9OaWNrTmFtZVBpY2tlcj1uZXcgWU9TV0lER0VUUy5Qcm9maWxlcy5XaWRn ZXRMb2FkZXIoKS5sb2FkKCJuaWNrbmFtZVBpY2tlciIsbmlja25hbWVDb25mKTt2 YXIgb1Bob3RvUGlja2VyPW5ldyBZT1NXSURHRVRTLlByb2ZpbGVzLldpZGdldExv YWRlcigpLmxvYWQoInBob3RvUGlja2VyIixwaG90b1BpY2tlckNvbmYpO319fTt9 KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuUHJvZmlsZXMuTGVnY2F5TmFtZVdpZGdl dD1mdW5jdGlvbigpe3ZhciBZVUQ9WUFIT08udXRpbC5Eb207dmFyIFlVRT1ZQUhP Ty51dGlsLkV2ZW50O3ZhciBWaXRhbGl0eVBhbmVsLHRvZ2dsZUVsZW1lbnQscmVx dWVzdEZvcm0sbGVnYWN5UGFuZWxGb3JtO3ZhciB0b2dnbGVkRXZlbnQ9bmV3IFlB SE9PLnV0aWwuQ3VzdG9tRXZlbnQoJ3RvZ2dsZUNvbnRlbnQnKTtmdW5jdGlvbiBj YWxsYmFja1N1Y2Nlc3Mobyl7ZnVuY3Rpb24gc3VibWl0U3VjY2VzcyhvKXt2YXIg ZGF0YT1ZQUhPTy5sYW5nLkpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpO2lmKGRh dGEuc3VjY2Vzcz09PXRydWUpe3ZhciBjdXJyZW50TmFtZT1ZVUQuZ2V0KCd5b3Mt bmlja25hbWUnKTtpZihkYXRhLm5pY2t0eXBlPT09J3Byb2ZpbGUtc2QnKXt2YXIg c2ROaWNrbmFtZT1ZVUQuZ2V0KCdsZWdhY3kteW9zLW5pY2tuYW1lJykuaW5uZXJI VE1MO2lmKCFjdXJyZW50TmFtZS5maXJzdENoaWxkKXtjdXJyZW50TmFtZS5hcHBl bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO30KY3VycmVudE5h bWUuZmlyc3RDaGlsZC5ub2RlVmFsdWU9c2ROaWNrbmFtZS5zdWJzdHJpbmcoMSxz ZE5pY2tuYW1lLmxlbmd0aC0xKTtZVUQucmVwbGFjZUNsYXNzKHRvZ2dsZUVsZW1l bnQsJ3lhbi1uaWNrbmFtZS1waWNrZXInLCd5b3Mtbmlja25hbWUtcGlja2VyJyk7 WVVFLnJlbW92ZUxpc3RlbmVyKHRvZ2dsZUVsZW1lbnQpO1lBSE9PLlNlYXJjaC5B bnN3ZXJzLlByb2ZpbGVzLllPU1dpZGdldHMuaW5pdCgpO30KZWxzZXtpZighY3Vy cmVudE5hbWUuZmlyc3RDaGlsZCl7Y3VycmVudE5hbWUuYXBwZW5kQ2hpbGQoZG9j dW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTt9CmN1cnJlbnROYW1lLmZpcnN0Q2hp bGQubm9kZVZhbHVlPVlVRC5nZXQoJ3lhbi1hbnN3ZXJzLXByb2ZpbGUtbmFtZScp LnZhbHVlO30KVml0YWxpdHlQYW5lbC5oaWRlKCk7fQplbHNlIGlmKGRhdGEuZXJy b3Ipe3ZhciBlcnJvckl0ZW1zPVlVRC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdm aXJzdCcsJ2xpJyxZVUQuZ2V0KCd5YW4tY29uZmlybS1jdGEtbWluaScpKTtpZihl cnJvckl0ZW1zWzBdKQp7dmFyIGVycm9yTGlzdCxlcnJvckVsZW1lbnROb2RlLGVy cm9yVGV4dE5vZGUsZXJyb3JUZXh0SHRtbDtlcnJvckxpc3Q9ZXJyb3JJdGVtc1sw XS5wYXJlbnROb2RlO2lmKFlVRC5nZXRDaGlsZHJlbihlcnJvckxpc3QpLmxlbmd0 aD4xKQp7d2hpbGUoWVVELmdldENoaWxkcmVuKGVycm9yTGlzdCkubGVuZ3RoIT09 MSl7ZXJyb3JMaXN0LnJlbW92ZUNoaWxkKFlVRC5nZXRMYXN0Q2hpbGQoZXJyb3JM aXN0KSk7fX0KaWYoZGF0YS5lcnJvci5uaWNrbmFtZT09PSd0b29fbG9uZycpe2Vy cm9yVGV4dEh0bWw9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmxlZ2FjeVdp ZGdldC50b29fbG9uZy5yZXBsYWNlKC8lT1BFTl9CT0xEJS9nLCc8c3Ryb25nPicp O2Vycm9yVGV4dEh0bWw9ZXJyb3JUZXh0SHRtbC5yZXBsYWNlKC8lQ0xPU0VfQk9M RCUvZywnPC9zdHJvbmc+Jyk7ZXJyb3JUZXh0SHRtbD1lcnJvclRleHRIdG1sLnJl cGxhY2UoLyVDSEFSQUNURVJfTElNSVQlLyxkYXRhLmVycm9yLmxpbWl0KTtlcnJv ck5vZGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtlcnJvck5vZGUuaW5u ZXJIVE1MPWVycm9yVGV4dEh0bWw7fQppZihkYXRhLmVycm9yLm5pY2tuYW1lPT09 J25vdF9wcm92aWRlZCcpe2Vycm9yVGV4dEh0bWw9WUFIT08uU2VhcmNoLkFuc3dl cnMubGFiZWxzLmxlZ2FjeVdpZGdldC5ub3RfcHJvdmlkZWQucmVwbGFjZSgvJU9Q RU5fQk9MRCUvZywnPHN0cm9uZz4nKTtlcnJvclRleHRIdG1sPWVycm9yVGV4dEh0 bWwucmVwbGFjZSgvJUNMT1NFX0JPTEQlL2csJzwvc3Ryb25nPicpO2Vycm9yTm9k ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO2Vycm9yTm9kZS5pbm5lckhU TUw9ZXJyb3JUZXh0SHRtbDt9CmlmKGRhdGEuZXJyb3Iubmlja25hbWU9PT0naW52 YWxpZCd8fGRhdGEuZXJyb3IuY3J1bWI9PT0naW52YWxpZCcpe2Vycm9yVGV4dEh0 bWw9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmxlZ2FjeVdpZGdldC5pbnZh bGlkO2Vycm9yVGV4dEh0bWw9ZXJyb3JUZXh0SHRtbC5yZXBsYWNlKC8lT1BFTl9M SU5LX0ZPUlVNJS9nLCc8YSBocmVmPSInK1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxh YmVscy5sZWdhY3lXaWRnZXQuZm9ydW1fbGluaysnIj4nKTtlcnJvclRleHRIdG1s PWVycm9yVGV4dEh0bWwucmVwbGFjZSgvJUNMT1NFX0xJTkslL2csJzwvYT4nKTtl cnJvck5vZGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtlcnJvck5vZGUu aW5uZXJIVE1MPWVycm9yVGV4dEh0bWw7fQplcnJvckxpc3QuYXBwZW5kQ2hpbGQo ZXJyb3JOb2RlKTt9fQplbHNle2Vycm9yVGV4dEh0bWw9JzxkaXYgaWQ9Inlhbi1j b25maXJtLWN0YS1taW5pIj4nKycgIDxkaXYgY2xhc3M9Indhcm5pbmciPicrJyAg ICA8dWw+JysnICAgICAgPGxpIGNsYXNzPSJmaXJzdCI+JysnICAgICAgICA8cD4n K1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5sZWdhY3lXaWRnZXQuaW52YWxp ZCsnPC9wPicrJyAgICAgIDwvbGk+JysnICAgIDwvdWw+JysnICA8L2Rpdj4nKyc8 L2Rpdj4nO2Vycm9yVGV4dEh0bWw9ZXJyb3JUZXh0SHRtbC5yZXBsYWNlKC8lT1BF Tl9MSU5LX0ZPUlVNJS9nLCc8YSBocmVmPSInK1lBSE9PLlNlYXJjaC5BbnN3ZXJz LmxhYmVscy5sZWdhY3lXaWRnZXQuZm9ydW1fbGluaysnIj4nKTtlcnJvclRleHRI dG1sPWVycm9yVGV4dEh0bWwucmVwbGFjZSgvJUNMT1NFX0xJTkslL2csJzwvYT4n KTtWaXRhbGl0eVBhbmVsLnNldEJvZHkoZXJyb3JUZXh0SHRtbCk7fX0KaWYoby5y ZXNwb25zZVRleHQhPT11bmRlZmluZWQpe3ZhciBkYXRhPVlBSE9PLmxhbmcuSlNP Ti5wYXJzZShvLnJlc3BvbnNlVGV4dCk7aWYoZGF0YS53aWRnZXQpe3ZhciB0ZW1w RGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3RlbXBEaXYuaW5uZXJI VE1MPWRhdGEud2lkZ2V0O3ZhciBjdGE9WVVELmdldEVsZW1lbnRzQnlDbGFzc05h bWUoJ2N0YS1idXR0b24nLCdpbnB1dCcsdGVtcERpdik7aWYoY3RhLmxlbmd0aCl7 WUFIT08uU2VhcmNoLkFuc3dlcnMuY3RhLmNvbnZlcnQoY3RhWzBdKTt9CnZhciBw YW5lbEhlYWRlcj10ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoMycpWzBd O2lmKHBhbmVsSGVhZGVyKXtwYW5lbEhlYWRlci5wYXJlbnROb2RlLnJlbW92ZUNo aWxkKHBhbmVsSGVhZGVyKTtWaXRhbGl0eVBhbmVsLnNldEhlYWRlcihwYW5lbEhl YWRlci5pbm5lckhUTUwpO30KVml0YWxpdHlQYW5lbC5zZXRCb2R5KHRlbXBEaXYu aW5uZXJIVE1MKTtWaXRhbGl0eVBhbmVsLnJlbmRlcihkb2N1bWVudC5ib2R5KTtW aXRhbGl0eVBhbmVsLnNob3coKTtWaXRhbGl0eVBhbmVsLmNmZy5yZXNldFByb3Bl cnR5KCd6aW5kZXgnKTtZVUQucmVtb3ZlQ2xhc3ModG9nZ2xlRWxlbWVudCwnbG9h ZGluZycpO2xlZ2FjeVBhbmVsRm9ybT1uZXcgWUFIT08udXRpbC5FbGVtZW50KCds ZWdhY3ktd2lkZ2V0Jyk7WVVFLnJlbW92ZUxpc3RlbmVyKGxlZ2FjeVBhbmVsRm9y bS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyksJ2NsaWNrJyk7WVVFLmFk ZExpc3RlbmVyKGxlZ2FjeVBhbmVsRm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgn YnV0dG9uJyksJ2NsaWNrJyxmdW5jdGlvbihlKXtZVUUucHJldmVudERlZmF1bHQo ZSk7WUFIT08uU2VhcmNoLkFuc3dlcnMuZm9ybVN1Ym1pdChsZWdhY3lQYW5lbEZv cm0se3N1Y2Nlc3M6c3VibWl0U3VjY2Vzc30pO30pO2xlZ2FjeVBhbmVsRm9ybS5v bignc3VibWl0JyxmdW5jdGlvbihlKXtZQUhPTy51dGlsLkV2ZW50LnByZXZlbnRE ZWZhdWx0KGUpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmZvcm1TdWJtaXQobGVnYWN5 UGFuZWxGb3JtLHtzdWNjZXNzOnN1Ym1pdFN1Y2Nlc3N9KTt9KTtZVUUub24oWVVE LmdldCgnY2FuY2VsLWJ1dHRvbicpLCdjbGljaycsZnVuY3Rpb24oZSl7WUFIT08u dXRpbC5FdmVudC5wcmV2ZW50RGVmYXVsdChlKTtWaXRhbGl0eVBhbmVsLmhpZGUo KTt9KTtZQUhPTy5TZWFyY2guQW5zd2Vycy5Qcm9maWxlcy5MZWdjYXlOYW1lT3B0 aW9uLmluaXQoKTt9CmVsc2V7WVVELnJlbW92ZUNsYXNzKHRvZ2dsZUVsZW1lbnQs J2xvYWRpbmcnKTt9fX0KZnVuY3Rpb24gY2FsbGJhY2tGYWlsKG8pe3JldHVybjt9 CmZ1bmN0aW9uIHRvZ2dsZVBhbmVsKCl7aWYoIVlBSE9PLnV0aWwuQ29ubmVjdC5p c0NhbGxJblByb2dyZXNzKHJlcXVlc3RGb3JtKSl7WVVELmFkZENsYXNzKHRvZ2ds ZUVsZW1lbnQsJ2xvYWRpbmcnKTt2YXIgc1VybD10b2dnbGVFbGVtZW50LmhyZWY7 dmFyIGNhbGxiYWNrPXtzdWNjZXNzOmNhbGxiYWNrU3VjY2VzcyxmYWlsdXJlOmNh bGxiYWNrRmFpbH07cmVxdWVzdEZvcm09WUFIT08udXRpbC5Db25uZWN0LmFzeW5j UmVxdWVzdCgnR0VUJyxzVXJsLGNhbGxiYWNrKTt9fQpmdW5jdGlvbiB0b2dnbGVD bGljayhlKXtZVUUucHJldmVudERlZmF1bHQoZSk7dG9nZ2xlZEV2ZW50LmZpcmUo KTt9CmZ1bmN0aW9uIGxvYWRXaWRnZXQoKQp7dmFyIGNvbmZpZ1BhbmVsPXt2aXNp YmxlOmZhbHNlLGNvbnN0cmFpbnRvdmlld3BvcnQ6dHJ1ZSxtb2RhbDp0cnVlLGRy YWdnYWJsZTpmYWxzZSxjbG9zZTp0cnVlLGZpeGVkY2VudGVyOnRydWUsd2lkdGg6 JzQwMHB4Jyx6SW5kZXg6MTAwfTtWaXRhbGl0eVBhbmVsPW5ldyBZQUhPTy53aWRn ZXQuUGFuZWwoJ2xlZ2FjeS13aWRnZXQtcGFuZWwnLGNvbmZpZ1BhbmVsKTtWaXRh bGl0eVBhbmVsLnNldEhlYWRlcignUGFuZWxIZWFkZXInKTtWaXRhbGl0eVBhbmVs LnJlbmRlcihkb2N1bWVudC5ib2R5KTt9CnRvZ2dsZWRFdmVudC5zdWJzY3JpYmUo dG9nZ2xlUGFuZWwpO3JldHVybntpbml0OmZ1bmN0aW9uKCl7dmFyIHRvZ2dsZUVs ZW1lbnRzPVlVRC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5YW4tbmlja25hbWUt cGlja2VyJywnYScpO2lmKHRvZ2dsZUVsZW1lbnRzLmxlbmd0aD4wKXt0b2dnbGVF bGVtZW50PXRvZ2dsZUVsZW1lbnRzWzBdO1lVRS5hZGRMaXN0ZW5lcih0b2dnbGVF bGVtZW50LCdjbGljaycsdG9nZ2xlQ2xpY2spO2xvYWRXaWRnZXQoKTt9fX07fSgp O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLlByb2ZpbGVzLkxlZ2NheU5hbWVPcHRpb249 ZnVuY3Rpb24oKXt2YXIgWVVEPVlBSE9PLnV0aWwuRG9tO3ZhciBZVUU9WUFIT08u dXRpbC5FdmVudDt2YXIgZW5hYmxlU0QsZW5hYmxlTGVnYWN5LHNob3dMZWdhY3lO aWNrbmFtZTtmdW5jdGlvbiBoYW5kbGVSYWRpb0NoYW5nZShlKXtpZihlbmFibGVM ZWdhY3kuY2hlY2tlZCl7c2hvd0xlZ2FjeU5pY2tuYW1lLmRpc2FibGVkPWZhbHNl O1lBSE9PLnV0aWwuRG9tLnNldFN0eWxlKFlVRC5nZXRMYXN0Q2hpbGQoc2hvd0xl Z2FjeU5pY2tuYW1lLnBhcmVudE5vZGUpLCdjb2xvcicsJyMzMzMnKTt9CmVsc2V7 c2hvd0xlZ2FjeU5pY2tuYW1lLmRpc2FibGVkPXRydWU7WUFIT08udXRpbC5Eb20u c2V0U3R5bGUoWVVELmdldExhc3RDaGlsZChzaG93TGVnYWN5Tmlja25hbWUucGFy ZW50Tm9kZSksJ2NvbG9yJywnIzk5OScpO319CnJldHVybntpbml0OmZ1bmN0aW9u KCl7ZW5hYmxlTGVnYWN5PVlVRC5nZXQoJ3lhbi11c2UtYW5zd2VyLXByb2ZpbGUn KTtlbmFibGVTRD1ZVUQuZ2V0KCd5YW4tdXNlLXNkLXByb2ZpbGUnKTtzaG93TGVn YWN5Tmlja25hbWU9WVVELmdldCgneWFuLWFuc3dlcnMtcHJvZmlsZS1uYW1lJyk7 aWYoZW5hYmxlTGVnYWN5JiZzaG93TGVnYWN5Tmlja25hbWUmJmVuYWJsZVNEKXtZ VUUub24oZW5hYmxlTGVnYWN5LCdjbGljaycsaGFuZGxlUmFkaW9DaGFuZ2UpO1lV RS5vbihlbmFibGVTRCwnY2xpY2snLGhhbmRsZVJhZGlvQ2hhbmdlKTt9fX07fSgp O1lBSE9PLlNlYXJjaC5BbnN3ZXJzLlByb2ZpbGVzLk5vdGlmeU1lPWZ1bmN0aW9u KCl7dmFyIFlVRD1ZQUhPTy51dGlsLkRvbTt2YXIgWVVFPVlBSE9PLnV0aWwuRXZl bnQ7dmFyIG5vdGlmeU1lO3ZhciBkb25lVVJMO3ZhciBtZW1iZXJDZW50ZXJVcmw9 Imh0dHBzOi8vZWRpdC55YWhvby5jb20vY29tbWNoYW5uZWwvbWFuYWdlP3NyYz1h bnMiO3ZhciB5b3NFbWFpbDtmdW5jdGlvbiBoYW5kZWxTZWxlY3Rpb24oZSl7YVVS TFBhcmFtcz1nZXRVcmxQYXJhbXMoZG9uZVVSTCk7aWYobm90aWZ5TWUuY2hlY2tl ZCl7aWYoY2hlY2tVcmxQYXJhbShhVVJMUGFyYW1zLCJ5YW4tYXNrLW5vdGlmeSIp KXthVVJMUGFyYW1zPXJlbW92ZVVybFBhcmFtKGFVUkxQYXJhbXMsInlhbi1hc2st bm90aWZ5Iik7fQphVVJMUGFyYW1zPXJlbW92ZVVybFBhcmFtKGFVUkxQYXJhbXMs Ii5pbnRsIik7YVVSTFBhcmFtcy5wdXNoKCJ5YW4tYXNrLW5vdGlmeT15Iik7fWVs c2V7YVVSTFBhcmFtcz1yZW1vdmVVcmxQYXJhbShhVVJMUGFyYW1zLCIuaW50bCIp O2lmKGNoZWNrVXJsUGFyYW0oYVVSTFBhcmFtcywieWFuLWFzay1ub3RpZnkiKSl7 YVVSTFBhcmFtcz1yZW1vdmVVcmxQYXJhbShhVVJMUGFyYW1zLCJ5YW4tYXNrLW5v dGlmeSIpO30KYVVSTFBhcmFtcy5wdXNoKCJ5YW4tYXNrLW5vdGlmeT1uIik7fQpk b25lVVJMPWFVUkxQYXJhbXMubGVuZ3RoPjA/Jz8nK2FVUkxQYXJhbXMuam9pbigi JiIpOicnO3BvcnQ9d2luZG93LmxvY2F0aW9uLnBvcnQhPT04MD8nOicrd2luZG93 LmxvY2F0aW9uLnBvcnQ6Jyc7eW9zRW1haWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUo ImEiKVswXS5ocmVmPW1lbWJlckNlbnRlclVybCsiJi5kb25lPSIrZW5jb2RlVVJJ Q29tcG9uZW50KCdodHRwOi8vJyt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUrcG9y dCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrZG9uZVVSTCk7fQpmdW5jdGlvbiBn ZXRVcmxQYXJhbXModXJsKXt2YXIgbmV3UXVlcnlQYXJhbXM9W107aWYodXJsLmxl bmd0aD4wKXt2YXIgcXVlcnlQYXJhbXM9dXJsLmNoYXJBdCgwKT09PSc/Jz91cmwu c3Vic3RyaW5nKDEpLnNwbGl0KCImIik6dXJsLnNwbGl0KCImIik7Zm9yKHZhciBp PTAsaj1xdWVyeVBhcmFtcy5sZW5ndGg7aTxqO2krKyl7dmFyIG5hbWVWYWx1ZVBh aXI9cXVlcnlQYXJhbXNbaV0uc3BsaXQoIj0iKTtuZXdRdWVyeVBhcmFtcy5wdXNo KG5hbWVWYWx1ZVBhaXJbMF0rJz0nK25hbWVWYWx1ZVBhaXJbMV0pO319CnJldHVy biBuZXdRdWVyeVBhcmFtczt9CmZ1bmN0aW9uIGNoZWNrVXJsUGFyYW0oYVVybFBh cmFtcyxwYXJhbSl7aWYoYVVybFBhcmFtcy5sZW5ndGg+MCl7Zm9yKHZhciBpPTAs aj1hVXJsUGFyYW1zLmxlbmd0aDtpPGo7aSsrKXt2YXIgbmFtZVZhbHVlUGFpcj1h VXJsUGFyYW1zW2ldLnNwbGl0KCI9Iik7aWYobmFtZVZhbHVlUGFpclswXT09PXBh cmFtKXtyZXR1cm4gdHJ1ZTt9fX0KcmV0dXJuIGZhbHNlO30KZnVuY3Rpb24gcmVt b3ZlVXJsUGFyYW0oYVVybFBhcmFtcyxwYXJhbSl7dmFyIG5ld1F1ZXJ5UGFyYW1z PVtdO2Zvcih2YXIgaT0wLGo9YVVybFBhcmFtcy5sZW5ndGg7aTxqO2krKyl7dmFy IG5hbWVWYWx1ZVBhaXI9YVVybFBhcmFtc1tpXS5zcGxpdCgiPSIpO2lmKG5hbWVW YWx1ZVBhaXJbMF0hPT1wYXJhbSl7bmV3UXVlcnlQYXJhbXMucHVzaChuYW1lVmFs dWVQYWlyWzBdKyc9JytuYW1lVmFsdWVQYWlyWzFdKTt9fQpyZXR1cm4gbmV3UXVl cnlQYXJhbXM7fQpyZXR1cm57aW5pdDpmdW5jdGlvbigpe2lmKFlVRC5nZXQoInlh bi11c2VyLXJlZ2lzdHJhdGlvbiIpKXtub3RpZnlNZT1ZVUQuZ2V0KCJ5YW4tYXNr LW5vdGlmeSIpO3lvc0VtYWlsPVlVRC5nZXQoInlvcy1lbWFpbCIpO2RvbmVVUkw9 d2luZG93LmxvY2F0aW9uLnNlYXJjaDtZVUUub24obm90aWZ5TWUsJ2NsaWNrJyxo YW5kZWxTZWxlY3Rpb24pO319fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuY29t cGFyZUZvcm1Db250ZW50PWZ1bmN0aW9uKCl7dmFyIFlVRD1ZQUhPTy51dGlsLkRv bTt2YXIgWVVFPVlBSE9PLnV0aWwuRXZlbnQ7ZnVuY3Rpb24gZm9ybVZhbHVlcyhm b3JtKQp7dmFyIHBhcmFtcz1bXTt2YXIgdGFncz1bJ2lucHV0JywndGV4dGFyZWEn LCdzZWxlY3QnXTtmb3IodmFyIGkgaW4gdGFncyl7WUFIT08udXRpbC5Eb20uYmF0 Y2goZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdzW2ldKSxmdW5jdGlvbihl bCl7dmFyIGZvcm1Db250ZW50PVtdO2lmKGVsLnR5cGUudG9Mb3dlckNhc2UoKT09 PSdyYWRpbyd8fGVsLnR5cGUudG9Mb3dlckNhc2UoKT09PSdjaGVja2JveCcpe2Zv cm1Db250ZW50LnB1c2goZWwubmFtZSk7Zm9ybUNvbnRlbnQucHVzaChlbC5jaGVj a2VkKTt9CmVsc2V7Zm9ybUNvbnRlbnQucHVzaChlbC5uYW1lKTtmb3JtQ29udGVu dC5wdXNoKGVsLnZhbHVlKTt9CnBhcmFtcy5wdXNoKGZvcm1Db250ZW50KTt9KTt9 CnJldHVybiBZQUhPTy5sYW5nLkpTT04uc3RyaW5naWZ5KHBhcmFtcyk7fQpyZXR1 cm57Z2V0Rm9ybVZhbHVlczpmdW5jdGlvbihvRm9ybSl7cmV0dXJuIGZvcm1WYWx1 ZXMob0Zvcm0pO30saGFzRm9ybUNoYW5nZWQ6ZnVuY3Rpb24oZm9ybVN0cmluZzEs Zm9ybVN0cmluZzIpe2lmKGZvcm1TdHJpbmcxIT09Zm9ybVN0cmluZzIpe3JldHVy biB0cnVlO30KZWxzZXtyZXR1cm4gZmFsc2U7fX19O30oKTtZQUhPTy5TZWFyY2gu QW5zd2Vycy5Qcm9maWxlcy5FZGl0UHJlZmVyZW5jZXNMZWF2ZVdpdGhvdXRTYXZp bmc9ZnVuY3Rpb24oKXt2YXIgWVVEPVlBSE9PLnV0aWwuRG9tO3ZhciBZVUU9WUFI T08udXRpbC5FdmVudDt2YXIgZWRpdEZyb20sZm9ybVN0cmluZ3MxO2Z1bmN0aW9u IGNvbmZpcm1DbG9zZShlKXtZVUUucmVtb3ZlTGlzdGVuZXIod2luZG93LCdiZWZv cmV1bmxvYWQnLGNvbmZpcm1DbG9zZSk7aWYoZSl7ZS5yZXR1cm5WYWx1ZT1ZQUhP Ty5TZWFyY2guQW5zd2Vycy5sYWJlbHMuZWRpdFNldHRpbmdzLmVkaXROb3RTYXZl ZDtyZXR1cm4gWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmVkaXRTZXR0aW5n cy5lZGl0Tm90U2F2ZWQ7fQpyZXR1cm4gWUFIT08uU2VhcmNoLkFuc3dlcnMubGFi ZWxzLmVkaXRTZXR0aW5ncy5jb250aW51ZVNhdmU7fQpmdW5jdGlvbiBjaGVja0Zv cm1WYWx1ZXMoZSl7dmFyIGZvcm1TdHJpbmdzMj1ZQUhPTy5TZWFyY2guQW5zd2Vy cy5jb21wYXJlRm9ybUNvbnRlbnQuZ2V0Rm9ybVZhbHVlcyhlZGl0RnJvbSk7dmFy IHRhcmdldD1ZVUUuZ2V0VGFyZ2V0KGUpO2lmKHRhcmdldC50YWdOYW1lLnRvTG93 ZXJDYXNlKCk9PT0nYScmJllBSE9PLlNlYXJjaC5BbnN3ZXJzLmNvbXBhcmVGb3Jt Q29udGVudC5oYXNGb3JtQ2hhbmdlZChmb3JtU3RyaW5nczEsZm9ybVN0cmluZ3My KSl7WVVFLm9uKHdpbmRvdywnYmVmb3JldW5sb2FkJyxjb25maXJtQ2xvc2UpO319 CnJldHVybntpbml0OmZ1bmN0aW9uKCl7aWYoWVVELmdldCgneWFuLXVzZXItZWRp dC1hYm91dCcpKXtlZGl0RnJvbT1ZVUQuZ2V0KCd5YW4tdXNlci1lZGl0LWFib3V0 Jyk7Zm9ybVN0cmluZ3MxPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmNvbXBhcmVGb3Jt Q29udGVudC5nZXRGb3JtVmFsdWVzKGVkaXRGcm9tKTtZVUUub24oWVVELmdldCgn dGFiLXNldHRpbmdzJyksJ2NsaWNrJyxjaGVja0Zvcm1WYWx1ZXMpO1lVRS5vbihZ VUQuZ2V0KCdlbWFpbC1zZXR0aW5ncycpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdh JyksJ2NsaWNrJyxjaGVja0Zvcm1WYWx1ZXMpO30KaWYoWVVELmdldCgneWFuLXVz ZXItZWRpdC1zZXR0aW5ncycpKXtlZGl0RnJvbT1ZVUQuZ2V0KCd5YW4tdXNlci1l ZGl0LXNldHRpbmdzJyk7Zm9ybVN0cmluZ3MxPVlBSE9PLlNlYXJjaC5BbnN3ZXJz LmNvbXBhcmVGb3JtQ29udGVudC5nZXRGb3JtVmFsdWVzKGVkaXRGcm9tKTtZVUUu b24oWVVELmdldCgndGFiLWFib3V0JyksJ2NsaWNrJyxjaGVja0Zvcm1WYWx1ZXMp O319fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuUHJvZmlsZXMuQ29udGVudFJv dXRpbmdPcHRpb249ZnVuY3Rpb24oKXt2YXIgWVVEPVlBSE9PLnV0aWwuRG9tO3Zh ciBZVUU9WUFIT08udXRpbC5FdmVudDt2YXIgZW5hYmxlQ29udGVudFJvdXRpbmcs c2hvd0NvbnRlbnRSb3V0aW5nO2Z1bmN0aW9uIGhhbmRsZUNoYW5nZShlKXtpZihl bmFibGVDb250ZW50Um91dGluZy5jaGVja2VkKXtzaG93Q29udGVudFJvdXRpbmcu ZGlzYWJsZWQ9ZmFsc2U7WUFIT08udXRpbC5Eb20uc2V0U3R5bGUoc2hvd0NvbnRl bnRSb3V0aW5nLnBhcmVudE5vZGUsJ2NvbG9yJywnIzMzMycpO30KZWxzZXtzaG93 Q29udGVudFJvdXRpbmcuZGlzYWJsZWQ9dHJ1ZTtZQUhPTy51dGlsLkRvbS5zZXRT dHlsZShzaG93Q29udGVudFJvdXRpbmcucGFyZW50Tm9kZSwnY29sb3InLCcjOTk5 Jyk7fX0KcmV0dXJue2luaXQ6ZnVuY3Rpb24oKXtlbmFibGVDb250ZW50Um91dGlu Zz1ZVUQuZ2V0KCd5YW4tZW5hYmxlLXN1Z2dlc3RlZC1xdWVzdGlvbicpO3Nob3dD b250ZW50Um91dGluZz1ZVUQuZ2V0KCd5YW4tc2hvdy1zdWdnZXN0ZWQtcXVlc3Rp b24nKTtpZihlbmFibGVDb250ZW50Um91dGluZyYmc2hvd0NvbnRlbnRSb3V0aW5n KXtZVUUub24oZW5hYmxlQ29udGVudFJvdXRpbmcsJ2NoYW5nZScsaGFuZGxlQ2hh bmdlKTtZVUUub24oZW5hYmxlQ29udGVudFJvdXRpbmcsJ2NsaWNrJyxoYW5kbGVD aGFuZ2UpO2hhbmRsZUNoYW5nZSgpO2lmKFlVRC5nZXRFbGVtZW50c0J5Q2xhc3NO YW1lKCdxdC1mb2N1cy15YW4tZW5hYmxlLXN1Z2dlc3RlZC1xdWVzdGlvbicsJ3An KS5sZW5ndGg+MCl7WUFIT08uU2VhcmNoLkFuc3dlcnMuc3RhdGljUXVhbGl0eVRp cHMuY2hhbmdlUVRQb3NpdGlvbigncXQtZm9jdXMteWFuLWVuYWJsZS1zdWdnZXN0 ZWQtcXVlc3Rpb24nLHtvZmZzZXRZOjQ1fSk7fX19fTt9KCk7WUFIT08uU2VhcmNo LkFuc3dlcnMuc3RhdGljUXVhbGl0eVRpcHM9ZnVuY3Rpb24oKXt2YXIgWVVEPVlB SE9PLnV0aWwuRG9tO3ZhciBZVUU9WUFIT08udXRpbC5FdmVudDt2YXIgY29uZmln O3JldHVybntjaGFuZ2VRVFBvc2l0aW9uOmZ1bmN0aW9uKGZvY3VzQ2xhc3MsY29u ZmlnKXt2YXIgcXVhbGl0eVRpcD1ZVUQuZ2V0KCd5YW4tcXQnKTtpZih0eXBlb2Yg Y29uZmlnPT0ndW5kZWZpbmVkJyl7Y29uZmlnPXt9O30KZWxzZXtjb25maWc9Y29u ZmlnO30KY29uZmlnLm9mZnNldFk9Y29uZmlnLm9mZnNldFl8fDIwO3ZhciB0YXJn ZXRFbGVtZW50PVlVRC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZvY3VzQ2xhc3Ms J3AnLHF1YWxpdHlUaXApO2lmKHF1YWxpdHlUaXAmJnRhcmdldEVsZW1lbnQubGVu Z3RoKXt2YXIgZWw9WVVELmdldChmb2N1c0NsYXNzLnJlcGxhY2UoL3F0LWZvY3Vz LS8sJycpKTtZVUQuc2V0WShxdWFsaXR5VGlwLFlVRC5nZXRZKGVsKS1jb25maWcu b2Zmc2V0WSk7WVVELnNldFN0eWxlKHF1YWxpdHlUaXAsJ2Rpc3BsYXknLCdibG9j aycpO319fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMucmVnaXN0cmF0aW9uQWJv dXRZb3U9ZnVuY3Rpb24oKXt2YXIgWVVFPVlBSE9PLnV0aWwuRXZlbnQ7dmFyIFlV RD1ZQUhPTy51dGlsLkRvbTt2YXIgZWRpdEFib3V0Rm9ybSxhYm91dFlvdVRleHQ7 ZnVuY3Rpb24gZml4Q1RBU3VibWl0c0FnYWluKCl7ZWRpdEFib3V0Rm9ybT1ZVUQu Z2V0KCd5YW4tdXNlci1lZGl0LWFib3V0Jyk7WVVFLnJlbW92ZUxpc3RlbmVyKGVk aXRBYm91dEZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpLCdjbGlj aycpO1lVRS5hZGRMaXN0ZW5lcihlZGl0QWJvdXRGb3JtLmdldEVsZW1lbnRzQnlU YWdOYW1lKCdidXR0b24nKSwnY2xpY2snLGZ1bmN0aW9uKGUpe1lVRS5wcmV2ZW50 RGVmYXVsdChlKTtpZihhYm91dFlvdVRleHQudmFsdWU9PT1ZQUhPTy5TZWFyY2gu QW5zd2Vycy5sYWJlbHMuZWRpdEFib3V0WW91LmRlZmF1bHRUZXh0KXthYm91dFlv dVRleHQudmFsdWU9Jyc7fQp0aGlzLmZvcm0uc3VibWl0KCk7fSk7WVVFLm9uKGVk aXRBYm91dEZvcm0sJ3N1Ym1pdCcsZnVuY3Rpb24oZSl7WVVFLnByZXZlbnREZWZh dWx0KGUpO2lmKGFib3V0WW91VGV4dC52YWx1ZT09PVlBSE9PLlNlYXJjaC5BbnN3 ZXJzLmxhYmVscy5lZGl0QWJvdXRZb3UuZGVmYXVsdFRleHQpe2Fib3V0WW91VGV4 dC52YWx1ZT0nJzt9CnRoaXMuc3VibWl0KCk7fSk7fQpyZXR1cm57aW5pdDpmdW5j dGlvbigpe2lmKFlVRC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxdC1mb2N1cy1l bWFpbC1zZXR0aW5ncycsJ3AnKS5sZW5ndGg+MCl7WUFIT08uU2VhcmNoLkFuc3dl cnMuc3RhdGljUXVhbGl0eVRpcHMuY2hhbmdlUVRQb3NpdGlvbigncXQtZm9jdXMt ZW1haWwtc2V0dGluZ3MnKTt9CmlmKFlVRC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l KCdxdC1mb2N1cy15YW4tYWJvdXQteW91JywncCcpLmxlbmd0aD4wKXtZQUhPTy5T ZWFyY2guQW5zd2Vycy5zdGF0aWNRdWFsaXR5VGlwcy5jaGFuZ2VRVFBvc2l0aW9u KCdxdC1mb2N1cy15YW4tYWJvdXQteW91Jyk7fQphYm91dFlvdVRleHQ9ZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1hYm91dC15b3UnKTtpZihhYm91dFlvdVRl eHQpe2lmKGFib3V0WW91VGV4dC52YWx1ZT09PVlBSE9PLlNlYXJjaC5BbnN3ZXJz LmxhYmVscy5lZGl0QWJvdXRZb3UuZGVmYXVsdFRleHR8fGFib3V0WW91VGV4dC52 YWx1ZT09PScnKXtZVUQuYWRkQ2xhc3MoYWJvdXRZb3VUZXh0LCdkZWZhdWx0Jyk7 YWJvdXRZb3VUZXh0LmRlZmF1bHRWYWx1ZT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5s YWJlbHMuZWRpdEFib3V0WW91LmRlZmF1bHRUZXh0O2Fib3V0WW91VGV4dC52YWx1 ZT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuZWRpdEFib3V0WW91LmRlZmF1 bHRUZXh0O30KWVVFLm9uKGFib3V0WW91VGV4dCwnZm9jdXMnLGZ1bmN0aW9uKGUp e2lmKHRoaXMudmFsdWU9PT1ZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuZWRp dEFib3V0WW91LmRlZmF1bHRUZXh0fHx0aGlzLnZhbHVlPT09Jycpe1lVRC5yZW1v dmVDbGFzcyh0aGlzLCdkZWZhdWx0Jyk7dGhpcy52YWx1ZT0nJzt9fSk7WVVFLm9u KGFib3V0WW91VGV4dCwnYmx1cicsZnVuY3Rpb24oZSl7aWYodGhpcy52YWx1ZT09 PScnKXtZVUQuYWRkQ2xhc3ModGhpcywnZGVmYXVsdCcpO3RoaXMudmFsdWU9WUFI T08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmVkaXRBYm91dFlvdS5kZWZhdWx0VGV4 dDt9fSk7WUFIT08uU2VhcmNoLkFuc3dlcnMubGltaXRDaGFyYWN0ZXJzKGFib3V0 WW91VGV4dCwxMDAwLGZhbHNlLFlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5s aW1pdENoYXJhY3RlcnMuc3RhdHVzQ291bnQsImJsb2NrIixZQUhPTy5TZWFyY2gu QW5zd2Vycy5jc3MuYXNrRmxvdy5jb3VudENsYXNzKTtmaXhDVEFTdWJtaXRzQWdh aW4oKTt9fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLmVkaXRMZWdhY3lOYW1l RXJyb3I9ZnVuY3Rpb24oKXt2YXIgWVVFPVlBSE9PLnV0aWwuRXZlbnQ7dmFyIFlV RD1ZQUhPTy51dGlsLkRvbTtyZXR1cm57aW5pdDpmdW5jdGlvbigpe2lmKGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCdsZWdhY3ktd2lkZ2V0JykmJllVRC5nZXRFbGVt ZW50c0J5Q2xhc3NOYW1lKCd1c2VyLWVkaXRsZWdhY3luYW1lJywnYm9keScpLmxl bmd0aD4wKXt2YXIgUXRFbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFuLXF0 Jyk7aWYoWVVELmhhc0NsYXNzKFF0RWwsJ3F0LWVycm9yJykpCntZVUQuc2V0WShR dEVsLFlVRC5nZXRZKFlVRC5nZXQoJ3lhbi1hbnN3ZXJzLXByb2ZpbGUtbmFtZScp KS0yNSk7fX19fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuUHJvZmlsZXMuU3Rh dGlzdGljc0NoYXJ0PWZ1bmN0aW9uKCl7dmFyIFlVRD1ZQUhPTy51dGlsLkRvbTtm dW5jdGlvbiBpbml0Q2hhcnQodGFibGVFbCl7dmFyIHByb2ZpbGVDaGFydHM9WVVE LmdldEFuY2VzdG9yQnlDbGFzc05hbWUodGFibGVFbCwneWFuLXByb2ZpbGUtZGF0 YScpO3ZhciBib3JkZXJDb2xvcj0weENDQ0NDQzt2YXIgcHJvZmlsZUNvbG9yPTB4 OThDQzYxO3ZhciBkZWVwQm9yZGVyQ29sb3I9MHg2OUE1MzE7aWYoWVVELmdldEVs ZW1lbnRzQnlDbGFzc05hbWUoJ2JyYW5kZWQtbWVtYmVyJykubGVuZ3RoPjApe2Jv cmRlckNvbG9yPVlVRC5Db2xvci50b0hleChZVUQuZ2V0U3R5bGUoWVVELmdldFBy ZXZpb3VzU2libGluZyh0YWJsZUVsKSwnYm9yZGVyLXRvcC1jb2xvcicpKS5zdWJz dHIoMSw2KTtwcm9maWxlQ29sb3I9WVVELkNvbG9yLnRvSGV4KFlVRC5nZXRTdHls ZShZVUQuZ2V0UHJldmlvdXNTaWJsaW5nKHRhYmxlRWwpLCdiYWNrZ3JvdW5kLWNv bG9yJykpLnN1YnN0cigxLDYpO3Byb2ZpbGVDb2xvcj1wYXJzZUludChwcm9maWxl Q29sb3IsMTYpO2JvcmRlckNvbG9yPXBhcnNlSW50KGJvcmRlckNvbG9yLDE2KTtk ZWVwQm9yZGVyQ29sb3I9cHJvZmlsZUNvbG9yO30KaWYocHJvZmlsZUNoYXJ0cyl7 WVVELmFkZENsYXNzKHByb2ZpbGVDaGFydHMsJ3lhbi1wcm9maWxlLWNoYXJ0Jyk7 fQppZih0YWJsZUVsLmlkPT0nbWVtYmVyLWFuc3dlcnMtZGF0YScpe1lVRC5hZGRD bGFzcyhwcm9maWxlQ2hhcnRzLCdtZW1iZXItYW5zd2Vycy1jaGFydCcpO30KZWxz ZSBpZih0YWJsZUVsLmlkPT0nbWVtYmVyLXF1ZXN0aW9ucy1kYXRhJyl7WVVELmFk ZENsYXNzKHByb2ZpbGVDaGFydHMsJ21lbWJlci1xdWVzdGlvbnMtY2hhcnQnKTt9 CnZhciBzdGF0aXN0aWNzRGF0YT1uZXcgWUFIT08udXRpbC5EYXRhU291cmNlKHRh YmxlRWwse3Jlc3BvbnNlVHlwZTpZQUhPTy51dGlsLkRhdGFTb3VyY2UuVFlQRV9I VE1MVEFCTEUscmVzcG9uc2VTY2hlbWE6e2ZpZWxkczpbe2tleTonU3RhdGUnfSx7 a2V5OidOdW1JblN0YXRlJyxwYXJzZXI6J251bWJlcid9XX19KTt2YXIgc2NhbGVk Rm9udFNpemU9MTI7dmFyIG1heENoYXJzQXREZWZhdWx0PTcKaWYodGFibGVFbC5n ZXRFbGVtZW50c0J5VGFnTmFtZSgndGJvZHknKVswXSl7dmFyIHRhYmxlQm9keT10 YWJsZUVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0Ym9keScpWzBdO3ZhciB0YWJs ZURhdGE9dGFibGVCb2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZCcpO2lmKHRh YmxlRGF0YS5sZW5ndGgpe3ZhciBkYXRhRW50cnlNYXhMZW5ndGg9MDtmb3IodmFy IGk9MCxqPXRhYmxlRGF0YS5sZW5ndGg7aTxqO2krKyl7dmFyIGRhdGFMZW5ndGg9 dGFibGVEYXRhW2ldLmlubmVySFRNTC5sZW5ndGg7aWYoZGF0YUxlbmd0aD5kYXRh RW50cnlNYXhMZW5ndGgpe2RhdGFFbnRyeU1heExlbmd0aD1kYXRhTGVuZ3RoO319 CnZhciByYXRpbz1NYXRoLmZsb29yKChtYXhDaGFyc0F0RGVmYXVsdC9kYXRhRW50 cnlNYXhMZW5ndGgpKnNjYWxlZEZvbnRTaXplKTtzY2FsZWRGb250U2l6ZT0oc2Nh bGVkRm9udFNpemU8PXJhdGlvKT9zY2FsZWRGb250U2l6ZTpyYXRpbzt9fQp0YWJs ZUVsLmNsYXNzTmFtZT0naGlkZGVuJzt2YXIgY2hhcnRFbD1kb2N1bWVudC5jcmVh dGVFbGVtZW50KCdkaXYnKTtjaGFydEVsLmNsYXNzTmFtZT0nY2hhcnQtZmxhc2gn O1lVRC5pbnNlcnRCZWZvcmUoY2hhcnRFbCx0YWJsZUVsKTtZVUQuc2V0U3R5bGUo Y2hhcnRFbCwnaGVpZ2h0JywnMTUwcHgnKTtmdW5jdGlvbiBkYXRhVGlwRnVuY3Rp b24oaXRlbSxpbmRleCxzZXJpZXMpe3JldHVybiBpdGVtLk51bUluU3RhdGUrJyAn K2l0ZW1bc2VyaWVzLnhGaWVsZF07fQp2YXIgc2VyaWVzRGVmPVt7eEZpZWxkOiJT dGF0ZSIsc3R5bGU6e2NvbG9yOnByb2ZpbGVDb2xvcixzaXplOjQwLGJvcmRlckNv bG9yOmRlZXBCb3JkZXJDb2xvcn19XTt2YXIgbXlDaGFydD1uZXcgWUFIT08ud2lk Z2V0LkNvbHVtbkNoYXJ0KGNoYXJ0RWwsc3RhdGlzdGljc0RhdGEse3dtb2RlOiJv cGFxdWUiLHhGaWVsZDonU3RhdGUnLHlGaWVsZDonTnVtSW5TdGF0ZScsc2VyaWVz OnNlcmllc0RlZixkYXRhVGlwRnVuY3Rpb246ZGF0YVRpcEZ1bmN0aW9uLHN0eWxl Ont5QXhpczp7bWFqb3JHcmlkTGluZXM6e3NpemU6MH0sc2l6ZToxLGhpZGVPdmVy bGFwcGluZ0xhYmVsczp0cnVlLGxhYmVsU3BhY2luZzowLGRpc3BsYXk6J25vbmUn LHNob3dMYWJlbHM6dHJ1ZSxtYWpvclRpY2tzOntjb2xvcjoweEYwRjhFNixkaXNw bGF5Oidub25lJ30sbWlub3JUaWNrczp7Y29sb3I6MHhGMEY4RTYsZGlzcGxheTon bm9uZSd9fSxkYXRhVGlwOntib3JkZXI6e2NvbG9yOjB4Q0NDQ0NDfX0sYmFja2dy b3VuZDp7Y29sb3I6MHhGRkZGRkZ9LGJvcmRlcjp7c2l6ZToxLGNvbG9yOmJvcmRl ckNvbG9yfSxwYWRkaW5nOjUsZm9udDp7bmFtZToiQXJpYWwiLGNvbG9yOjB4MzMz MzMzLHNpemU6c2NhbGVkRm9udFNpemV9fX0pO3ZhciBjaGFydE1ham9yVW5pdD0w O3N0YXRpc3RpY3NEYXRhLnNlbmRSZXF1ZXN0KG51bGwse3N1Y2Nlc3M6ZnVuY3Rp b24ocmVxLHJlcyl7Zm9yKHZhciBpPTAsbGVuPXJlcy5yZXN1bHRzLmxlbmd0aDtp PGxlbjtpKyspe2lmKGNoYXJ0TWFqb3JVbml0PHJlcy5yZXN1bHRzW2ldLk51bUlu U3RhdGUpCntjaGFydE1ham9yVW5pdD1yZXMucmVzdWx0c1tpXS5OdW1JblN0YXRl O319fX0pO3ZhciBheGlzTWFqb3JVbml0PW5ldyBZQUhPTy53aWRnZXQuTnVtZXJp Y0F4aXMoKTtheGlzTWFqb3JVbml0LnNjYWxlPSdsaW5lYXInO2F4aXNNYWpvclVu aXQubWFqb3JVbml0PWNoYXJ0TWFqb3JVbml0O2F4aXNNYWpvclVuaXQubWF4aW11 bT1jaGFydE1ham9yVW5pdDtteUNoYXJ0LnNldCgneUF4aXMnLGF4aXNNYWpvclVu aXQpO30KcmV0dXJue2luaXQ6ZnVuY3Rpb24oKXt2YXIgcGxheWVyVmVyc2lvbj1Z QUhPTy5kZWNvbmNlcHQuU1dGT2JqZWN0VXRpbC5nZXRQbGF5ZXJWZXJzaW9uKCk7 aWYoKHBsYXllclZlcnNpb24ubWFqb3I9PTkmJnBsYXllclZlcnNpb24ubWlub3I+ PTEpfHxwbGF5ZXJWZXJzaW9uLm1ham9yPjkpe2lmKFlVRC5nZXQoJ21lbWJlci1h bnN3ZXJzLWRhdGEnKSYmWVVELmdldCgnbWVtYmVyLXF1ZXN0aW9ucy1kYXRhJykp e2luaXRDaGFydChZVUQuZ2V0KCdtZW1iZXItYW5zd2Vycy1kYXRhJykpO2luaXRD aGFydChZVUQuZ2V0KCdtZW1iZXItcXVlc3Rpb25zLWRhdGEnKSk7fX0KZWxzZQp7 dmFyIGFEYXRhPVlVRC5nZXQoJ21lbWJlci1hbnN3ZXJzLWRhdGEnKTtZQUhPTy51 dGlsLkRvbS5zZXRTdHlsZShhRGF0YSwndGV4dC1pbmRlbnQnLDApO1lBSE9PLnV0 aWwuRG9tLnNldFN0eWxlKGFEYXRhLCdwb3NpdGlvbicsJ3JlbGF0aXZlJyk7dmFy IHFEYXRhPVlVRC5nZXQoJ21lbWJlci1xdWVzdGlvbnMtZGF0YScpO1lBSE9PLnV0 aWwuRG9tLnNldFN0eWxlKHFEYXRhLCd0ZXh0LWluZGVudCcsMCk7WUFIT08udXRp bC5Eb20uc2V0U3R5bGUocURhdGEsJ3Bvc2l0aW9uJywncmVsYXRpdmUnKTt2YXIg cHJvZmlsZURhdGE9WVVELmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3lhbi1wcm9m aWxlLWRhdGEnLCdkaXYnKTtmb3IodmFyIGk9MCxsZW49cHJvZmlsZURhdGEubGVu Z3RoO2k8bGVuO2krKyl7dmFyIGRhdGFIZWFkZXJzPVlVRC5nZXRGaXJzdENoaWxk KHByb2ZpbGVEYXRhW2ldKTtZQUhPTy51dGlsLkRvbS5zZXRTdHlsZShkYXRhSGVh ZGVycywndGV4dC1pbmRlbnQnLDApO1lBSE9PLnV0aWwuRG9tLnNldFN0eWxlKGRh dGFIZWFkZXJzLCdwb3NpdGlvbicsJ3JlbGF0aXZlJyk7fX19fTt9KCk7WUFIT08u U2VhcmNoLkFuc3dlcnMuUHJvZmlsZXMuY29udGFjdHNMaXN0Rm9jdXM9ZnVuY3Rp b24oKQp7dmFyIFlVRD1ZQUhPTy51dGlsLkRvbTtmdW5jdGlvbiBhdXRvRm9jdXNT Y3JvbGwoZWwpe3ZhciBhY3RpdmVJdGVtcz1ZVUQuZ2V0RWxlbWVudHNCeUNsYXNz TmFtZSgnYWN0aXZlJywnbGknLGVsKTtpZihhY3RpdmVJdGVtc1swXSl7dmFyIHNj cm9sbFRvPWFjdGl2ZUl0ZW1zWzBdLm9mZnNldFRvcDt2YXIgYXR0cmlidXRlcz17 c2Nyb2xsOnt0bzpbMCxzY3JvbGxUb119fTt2YXIgYW5pbT1uZXcgWUFIT08udXRp bC5TY3JvbGwoZWwsYXR0cmlidXRlcyk7YW5pbS5hbmltYXRlKCk7fX0KcmV0dXJu e2luaXQ6ZnVuY3Rpb24oKXt2YXIgY29udGFjdExpc3RXcmFwcGVyPVlVRC5nZXQo J215LWNvbnRhY3RzLWxpc3QnKTtpZihjb250YWN0TGlzdFdyYXBwZXIpe3ZhciBj b250YWN0TGlzdHM9WVVELmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2JkJywnb2wn LGNvbnRhY3RMaXN0V3JhcHBlcik7aWYoY29udGFjdExpc3RzWzBdKXthdXRvRm9j dXNTY3JvbGwoY29udGFjdExpc3RzWzBdKTt9fX19O30oKTtZQUhPTy5TZWFyY2gu QW5zd2Vycy5Qcm9maWxlcy5hYm91dE1lVG9nZ2xlcj1mdW5jdGlvbigpCnt2YXIg WVVEPVlBSE9PLnV0aWwuRG9tO3ZhciBZVUU9WUFIT08udXRpbC5FdmVudDtmdW5j dGlvbiBhdHRhY2hUb2dnbGVFdmVudChlKXtZVUUucHJldmVudERlZmF1bHQoZSk7 WUFIT08uU2VhcmNoLkFuc3dlcnMudG9nZ2xlZEV2ZW50LmZpcmUoKTt9CmZ1bmN0 aW9uIHNldFVwVG9nZ2xlcyhlbCl7dmFyIG9Db25maWc9e2NvbnRhaW5lck5vZGU6 ZWwsY3JlYXRlVG9nZ2xlOnt0b2dnbGVJRDonYWJvdXQtbWUtdG9nZ2xlJ30sYXV0 b0hpZGU6dHJ1ZSxzaG93VGV4dDpZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMu YW5zd2Vyc0NvbXBhY3Quc2hvdyxoaWRlVGV4dDpZQUhPTy5TZWFyY2guQW5zd2Vy cy5sYWJlbHMuYW5zd2Vyc0NvbXBhY3QuaGlkZSxjb250ZW50Tm9kZTpZQUhPTy51 dGlsLkRvbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZCcsJ2RpdicsZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoJ21lbWJlci1hYm91dC10ZXh0JykpWzBdfTt2YXIg b1RvZ2dsZT1uZXcgWUFIT08uU2VhcmNoLkFuc3dlcnMudG9nZ2xlKG9Db25maWcp O29Ub2dnbGUuaW5pdCgpO30KcmV0dXJue2luaXQ6ZnVuY3Rpb24oKXt2YXIgYWJv dXRtZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVtYmVyLWFib3V0LXRleHQn KTtpZihZVUQuaGFzQ2xhc3MoYWJvdXRtZSwndG9nZ2xlJykpCntZVUUub24oWVVE LmdldEZpcnN0Q2hpbGQoYWJvdXRtZSksJ2NsaWNrJyxhdHRhY2hUb2dnbGVFdmVu dCkKc2V0VXBUb2dnbGVzKGFib3V0bWUpO319fTt9KCk7WUFIT08ubmFtZXNwYWNl KCdZQUhPTy5TZWFyY2guQW5zd2Vycy5TZWFyY2gnKTtZQUhPTy5TZWFyY2guQW5z d2Vycy5TZWFyY2guZGVmYXVsdElucHV0VGV4dD1mdW5jdGlvbigpe3ZhciBZVUQ9 WUFIT08udXRpbC5Eb20sWVVFPVlBSE9PLnV0aWwuRXZlbnQ7dmFyIGlucDtmdW5j dGlvbiBmaXhDVEFTdWJtaXRzQWdhaW4oKXtZVUUucmVtb3ZlTGlzdGVuZXIoaW5w LmZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpLCdjbGljaycpO1lV RS5yZW1vdmVMaXN0ZW5lcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzZXQt YnV0dG9uJyksJ2NsaWNrJyk7ZnVuY3Rpb24gaGFuZGxlQ3RhQ2xpY2tzKGUpe1lV RS5wcmV2ZW50RGVmYXVsdChlKTtjdGFCdXR0b249WVVFLmdldFRhcmdldChlKTt2 YXIgaGlkZGVuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7aGlkZGVu Lm5hbWU9Y3RhQnV0dG9uLm5hbWU7aGlkZGVuLnR5cGU9J2hpZGRlbic7aGlkZGVu LnZhbHVlPWN0YUJ1dHRvbi52YWx1ZTt0aGlzLmZvcm0uYXBwZW5kQ2hpbGQoaGlk ZGVuKTtpZihZQUhPTy5sYW5nLnRyaW0oaW5wLnZhbHVlKS5sZW5ndGg+MCYmaW5w LnZhbHVlIT09WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnNlYXJjaEZvcm0u ZGVmYXVsdFRleHQmJmlucC52YWx1ZSE9PScnJiZpbnAudmFsdWUhPT1ZQUhPTy5T ZWFyY2guQW5zd2Vycy5sYWJlbHMuc2VhcmNoRm9ybS5lbnRlclNlYXJjaFRlcm1z KXt2YXIgc2VhcmNoRmlsdGVyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4t c2VhcmNoLWZpbHRlcicpO2lmKHNlYXJjaEZpbHRlcikKe3ZhciBzZWFyY2hGaWx0 ZXJGb3JtPXNlYXJjaEZpbHRlci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZm9ybScp WzBdO2lmKHNlYXJjaEZpbHRlckZvcm0pe3ZhciBmaWx0ZXJfaW5wPWRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7ZmlsdGVyX2lucC50eXBlPSdoaWRkZW4n O2ZpbHRlcl9pbnAubmFtZT0nZmlsdGVyX3NlYXJjaCc7ZmlsdGVyX2lucC52YWx1 ZT0ndHJ1ZSc7c2VhcmNoRmlsdGVyRm9ybS5hcHBlbmRDaGlsZChmaWx0ZXJfaW5w KTtzZWFyY2hGaWx0ZXJGb3JtLnN1Ym1pdCgpO319ZWxzZXt0aGlzLmZvcm0uc3Vi bWl0KCk7fX0KZWxzZQp7WVVELmFkZENsYXNzKGlucCwnZXJyb3InKTtpbnAudmFs dWU9WUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLnNlYXJjaEZvcm0uZW50ZXJT ZWFyY2hUZXJtczt9fQpZVUUuYWRkTGlzdGVuZXIoaW5wLmZvcm0uZ2V0RWxlbWVu dHNCeVRhZ05hbWUoJ2J1dHRvbicpLCdjbGljaycsaGFuZGxlQ3RhQ2xpY2tzKTtZ VUUuYWRkTGlzdGVuZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2V0LWJ1 dHRvbicpLCdjbGljaycsaGFuZGxlQ3RhQ2xpY2tzKTtZVUUub24oaW5wLmZvcm0s J3N1Ym1pdCcsZnVuY3Rpb24oZSl7WVVFLnByZXZlbnREZWZhdWx0KGUpO2lmKFlB SE9PLmxhbmcudHJpbShpbnAudmFsdWUpLmxlbmd0aD4wJiZpbnAudmFsdWUhPT1Z QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc2VhcmNoRm9ybS5kZWZhdWx0VGV4 dCYmaW5wLnZhbHVlIT09JycmJmlucC52YWx1ZSE9PVlBSE9PLlNlYXJjaC5BbnN3 ZXJzLmxhYmVscy5zZWFyY2hGb3JtLmVudGVyU2VhcmNoVGVybXMpe3ZhciBzZWFy Y2hGaWx0ZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1zZWFyY2gtZmls dGVyJyk7aWYoc2VhcmNoRmlsdGVyKQp7dmFyIGZvcm1zPXNlYXJjaEZpbHRlci5n ZXRFbGVtZW50c0J5VGFnTmFtZSgnZm9ybScpWzBdO2lmKHNlYXJjaEZpbHRlckZv cm0pe3ZhciBmaWx0ZXJfaW5wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0 Jyk7ZmlsdGVyX2lucC50eXBlPSdoaWRkZW4nO2ZpbHRlcl9pbnAubmFtZT0nZmls dGVyX3NlYXJjaCc7ZmlsdGVyX2lucC52YWx1ZT0ndHJ1ZSc7c2VhcmNoRmlsdGVy Rm9ybS5hcHBlbmRDaGlsZChmaWx0ZXJfaW5wKTtzZWFyY2hGaWx0ZXJGb3JtLnN1 Ym1pdCgpO319ZWxzZXtpbnAuZm9ybS5zdWJtaXQoKTt9fQplbHNlCntZVUQuYWRk Q2xhc3MoaW5wLCdlcnJvcicpO2lucC52YWx1ZT1ZQUhPTy5TZWFyY2guQW5zd2Vy cy5sYWJlbHMuc2VhcmNoRm9ybS5lbnRlclNlYXJjaFRlcm1zO319KTt9CnJldHVy bntpbml0OmZ1bmN0aW9uKCl7aW5wPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5 YW4tcCcpO3ZhciBhZHZhbmNlRm9ybT1ZVUQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt ZSgnYWR2YW5jZWQtc2VhcmNoLWZsb3cnLCdmb3JtJyk7aWYoaW5wJiZhZHZhbmNl Rm9ybS5sZW5ndGg9PTApe2lmKGlucC52YWx1ZT09PScnfHxpbnAudmFsdWU9PT1Z QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc2VhcmNoRm9ybS5kZWZhdWx0VGV4 dHx8WUFIT08ubGFuZy50cmltKGlucC52YWx1ZSkubGVuZ3RoPT0wKXtZVUQucmVt b3ZlQ2xhc3MoaW5wLCdlcnJvcicpO1lVRC5hZGRDbGFzcyhpbnAsJ2RlZmF1bHQn KTtpbnAuZGVmYXVsdFZhbHVlPVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5z ZWFyY2hGb3JtLmRlZmF1bHRUZXh0O2lucC52YWx1ZT1ZQUhPTy5TZWFyY2guQW5z d2Vycy5sYWJlbHMuc2VhcmNoRm9ybS5kZWZhdWx0VGV4dDt9CllVRS5vbihpbnAs J2ZvY3VzJyxmdW5jdGlvbihlKXtZVUQucmVtb3ZlQ2xhc3ModGhpcywnZXJyb3In KTtZVUQucmVtb3ZlQ2xhc3ModGhpcywnZGVmYXVsdCcpO2lmKHRoaXMudmFsdWU9 PT0nJ3x8dGhpcy52YWx1ZT09PVlBSE9PLlNlYXJjaC5BbnN3ZXJzLmxhYmVscy5z ZWFyY2hGb3JtLmRlZmF1bHRUZXh0fHx0aGlzLnZhbHVlPT09WUFIT08uU2VhcmNo LkFuc3dlcnMubGFiZWxzLnNlYXJjaEZvcm0uZW50ZXJTZWFyY2hUZXJtcyl7dGhp cy52YWx1ZT0nJzt9fSk7WVVFLm9uKGlucCwna2V5dXAnLGZ1bmN0aW9uKGUpe3Zh ciBzZWFyY2hGaWx0ZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhbi1zZWFy Y2gtZmlsdGVyJyk7aWYoc2VhcmNoRmlsdGVyKQp7dmFyIHNlYXJjaEZpbHRlckZv cm09c2VhcmNoRmlsdGVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3JtJylbMF07 dmFyIGhpZGRlbktleXdvcmQ9c2VhcmNoRmlsdGVyRm9ybS5lbGVtZW50c1sncCdd O2lmKGhpZGRlbktleXdvcmQpe2hpZGRlbktleXdvcmQudmFsdWU9aW5wLnZhbHVl O319fSk7WVVFLm9uKGlucCwnYmx1cicsZnVuY3Rpb24oZSl7aWYodGhpcy52YWx1 ZT09PScnKXtZVUQuYWRkQ2xhc3MoaW5wLCdkZWZhdWx0Jyk7dGhpcy52YWx1ZT1Z QUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuc2VhcmNoRm9ybS5kZWZhdWx0VGV4 dDt9fSk7Zml4Q1RBU3VibWl0c0FnYWluKCk7fQp2YXIgc2F2ZUNoZWNrYm94PWRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZGQtc2F2ZScpO3ZhciBzYXZlSW5wdXQ9 ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FkZC1zYXZlLW5hbWUnKTt2YXIgc2F2 ZUxhYmVsO2lmKHNhdmVJbnB1dCl7c2F2ZUxhYmVsPXNhdmVJbnB1dC5wYXJlbnRO b2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsYWJlbCcpO3NhdmVMYWJlbD1zYXZl TGFiZWxbMF07WUFIT08udXRpbC5Eb20uYWRkQ2xhc3Moc2F2ZUxhYmVsLCdvZmZz Y3JlZW4nKTtpZihzYXZlSW5wdXQudmFsdWU9PT0nJ3x8c2F2ZUlucHV0LnZhbHVl PT09c2F2ZUxhYmVsLmZpcnN0Q2hpbGQubm9kZVZhbHVlfHxZQUhPTy5sYW5nLnRy aW0oc2F2ZUlucHV0LnZhbHVlKS5sZW5ndGg9PTApe1lVRC5yZW1vdmVDbGFzcyhz YXZlSW5wdXQsJ2Vycm9yJyk7WVVELmFkZENsYXNzKHNhdmVJbnB1dCwnZGVmYXVs dCcpO3NhdmVJbnB1dC5kZWZhdWx0VmFsdWU9c2F2ZUxhYmVsLmZpcnN0Q2hpbGQu bm9kZVZhbHVlO3NhdmVJbnB1dC52YWx1ZT1zYXZlTGFiZWwuZmlyc3RDaGlsZC5u b2RlVmFsdWU7fQpZVUUub24oc2F2ZUlucHV0LCdmb2N1cycsZnVuY3Rpb24oZSl7 WVVELnJlbW92ZUNsYXNzKHRoaXMsJ2Vycm9yJyk7WVVELnJlbW92ZUNsYXNzKHRo aXMsJ2RlZmF1bHQnKTtpZih0aGlzLnZhbHVlPT09Jyd8fHRoaXMudmFsdWU9PT1z YXZlTGFiZWwuZmlyc3RDaGlsZC5ub2RlVmFsdWUpe3RoaXMudmFsdWU9Jyc7fX0p O1lVRS5vbihzYXZlSW5wdXQsJ2JsdXInLGZ1bmN0aW9uKGUpe2lmKHRoaXMudmFs dWU9PT0nJyl7WVVELmFkZENsYXNzKHRoaXMsJ2RlZmF1bHQnKTt0aGlzLnZhbHVl PXNhdmVMYWJlbC5maXJzdENoaWxkLm5vZGVWYWx1ZTt9fSk7fQppZihzYXZlSW5w dXQmJnNhdmVDaGVja2JveCl7c2F2ZUlucHV0LmRpc2FibGVkPSFzYXZlQ2hlY2ti b3guY2hlY2tlZDtZVUUub24oc2F2ZUNoZWNrYm94LCdjbGljaycsZnVuY3Rpb24o ZSl7c2F2ZUlucHV0LmRpc2FibGVkPSF0aGlzLmNoZWNrZWQ7fSk7fQppZihzYXZl TGFiZWwmJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YW4tcXQnKSl7WUFIT08u U2VhcmNoLkFuc3dlcnMucXVhbGl0eVRpcHMuYWRkQ2hlY2soc2F2ZUxhYmVsLGZh bHNlLHRydWUsZmFsc2UpO319fTt9KCk7WUFIT08uU2VhcmNoLkFuc3dlcnMuU2Vh cmNoLkNhdGVnb3J5VG9vbD1mdW5jdGlvbigpe3ZhciBZVUQ9WUFIT08udXRpbC5E b20sWVVFPVlBSE9PLnV0aWwuRXZlbnQsWVVDPVlBSE9PLnV0aWwuQ29ubmVjdDt2 YXIgY2F0ZWdvcnlUb29sV3JhcHBlcixoZWFkaW5nTG9hZGVyLGFqYXhIYW5kbGUs dGltZW91dCxmb2N1c2VkRWwsY2FjaGU9W10sc2VsZWN0QnV0dG9ucztmdW5jdGlv biB1cGRhdGVTZWxlY3QobmV4dElkLHZhbHVlKXtyZXNldFNlbGVjdHMobmV4dElk KTtpZigoY2FjaGVbdmFsdWVdJiZjYWNoZVt2YWx1ZV0ubGVuZ3RoIT09MCl8fChj YWNoZVt2YWx1ZV09PT1mYWxzZSkpe25leHRJZD0nY2F0ZWdvcnktbGV2ZWwtJytu ZXh0SWQ7dmFyIG5leHRFbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXh0SWQp O2lmKCFuZXh0RWwpe3ZhciBuZXh0RWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn c2VsZWN0Jyk7bmV4dEVsLmlkPW5leHRJZDtuZXh0RWwubmFtZT0nY2F0ZWdvcnkn O25leHRFbC5zaXplPWNhdGVnb3J5VG9vbFdyYXBwZXIuZ2V0RWxlbWVudHNCeVRh Z05hbWUoJ3NlbGVjdCcpWzBdLnNpemU7Y2F0ZWdvcnlUb29sV3JhcHBlci5hcHBl bmRDaGlsZChuZXh0RWwpO1lVRS5vbihuZXh0RWwsJ2NoYW5nZScsaGFuZGxlQ2hh bmdlKTtZQUhPTy5TZWFyY2guQW5zd2Vycy5TZWFyY2guc2VsZWN0Rml4LmFkZFNl bGVjdChuZXh0RWwpO30KbmV4dEVsLmlubmVySFRNTD0nJzt2YXIgb3B0aW9uPWRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO29wdGlvbi5kaXNhYmxlZD10 cnVlO29wdGlvbi5jbGFzc05hbWU9J2Rpc2FibGVkJztvcHRpb24udmFsdWU9dmFs dWU7aWYoY2FjaGVbdmFsdWVdJiZjYWNoZVt2YWx1ZV0ubGVuZ3RoIT09MCl7bmV4 dEVsLmlubmVySFRNTD0nJztvcHRpb24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl YXRlVGV4dE5vZGUoWUFIT08uU2VhcmNoLkFuc3dlcnMubGFiZWxzLmNhdGVnb3J5 V2lkZ2V0LnBsZWFzZVNlbGVjdCkpO1lVRC5hZGRDbGFzcyhvcHRpb24sJ3BsZWFz ZS1zZWxlY3QnKTtuZXh0RWwuYXBwZW5kQ2hpbGQob3B0aW9uKTt2YXIgYWxsT3B0 aW9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO2FsbE9wdGlvbi5h cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShZQUhPTy5TZWFyY2gu QW5zd2Vycy5sYWJlbHMuY2F0ZWdvcnlXaWRnZXQuYWxsU3ViQ2F0ZWdvcmllcykp O2FsbE9wdGlvbi52YWx1ZT12YWx1ZTtuZXh0RWwuYXBwZW5kQ2hpbGQoYWxsT3B0 aW9uKTtZVUQuYWRkQ2xhc3MoYWxsT3B0aW9uLCdhbGwnKTtmb3IoY2F0ZWdvcnkg aW4gY2FjaGVbdmFsdWVdLmNoaWxkKXtvcHRpb249ZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnb3B0aW9uJyk7b3B0aW9uLnZhbHVlPWNhY2hlW3ZhbHVlXS5jaGlsZFtj YXRlZ29yeV1bJ2lkJ107b3B0aW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0 ZVRleHROb2RlKGNhY2hlW3ZhbHVlXS5jaGlsZFtjYXRlZ29yeV1bJ25hbWUnXSkp O25leHRFbC5hcHBlbmRDaGlsZChvcHRpb24pO319CmVsc2V7b3B0aW9uLmFwcGVu ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFlBSE9PLlNlYXJjaC5BbnN3 ZXJzLmxhYmVscy5jYXRlZ29yeVdpZGdldC5sb2FkaW5nQ2F0ZWdvcmllcykpO25l eHRFbC5hcHBlbmRDaGlsZChvcHRpb24pO25leHRFbC5zZWxlY3RlZEluZGV4PTA7 fQpuZXh0RWwuc2VsZWN0ZWRJbmRleD0xO2lmKG5leHRFbD09Zm9jdXNlZEVsKXtu ZXh0RWwuZm9jdXMoKTt9CllVRC5yZW1vdmVDbGFzcyhoZWFkaW5nTG9hZGVyLCds b2FkaW5nJyk7fX0KZnVuY3Rpb24gcmVzZXRTZWxlY3RzKGlkKXtmb3IodmFyIGk9 aWQ7ZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdGVnb3J5LWxldmVsLScr aSk7aSsrKXtpZihpPjEpe2VsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO30K ZWxzZXtlbC5pbm5lckhUTUw9Jyc7dmFyIG9wdGlvbj1kb2N1bWVudC5jcmVhdGVF bGVtZW50KCdvcHRpb24nKTtvcHRpb24uZGlzYWJsZWQ9dHJ1ZTtvcHRpb24uY2xh c3NOYW1lPSdkaXNhYmxlZCc7b3B0aW9uLnZhbHVlPS0xO29wdGlvbi5hcHBlbmRD aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShZQUhPTy5TZWFyY2guQW5zd2Vy cy5sYWJlbHMuY2F0ZWdvcnlXaWRnZXQubm9TdWJDYXRlZ29yaWVzKSk7ZWwuYXBw ZW5kQ2hpbGQob3B0aW9uKTt9fX0KZnVuY3Rpb24gaGFuZGxlRm9jdXMoZSl7Zm9j dXNlZEVsPVlVRS5nZXRUYXJnZXQoZSk7fQpmdW5jdGlvbiBoYW5kbGVCbHVyKGUp e2ZvY3VzZWRFbD1mYWxzZTt9CmZ1bmN0aW9uIGhhbmRsZUNoYW5nZShlKXtZVUQu YWRkQ2xhc3MoaGVhZGluZ0xvYWRlciwnbG9hZGluZycpO3ZhciBjdXJyZW50RWw9 WVVFLmdldFRhcmdldChlKTt2YXIgY3VycmVudElkPWN1cnJlbnRFbC5pZDt2YXIg bmV4dElkPWN1cnJlbnRJZC5tYXRjaCgvY2F0ZWdvcnktbGV2ZWwtKFxkKykvKTtp ZihuZXh0SWQpe25leHRJZD0ocGFyc2VJbnQobmV4dElkWzFdLDEwKSsxKTt9CmVs c2V7bmV4dElkPTA7fQppZihjdXJyZW50RWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUo J29wdGlvbicpW3RoaXMuc2VsZWN0ZWRJbmRleF0pe3ZhciBzZWxlY3RlZE9wdGlv bj1jdXJyZW50RWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ29wdGlvbicpW3RoaXMu c2VsZWN0ZWRJbmRleF07aWYoWVVELmhhc0NsYXNzKHNlbGVjdGVkT3B0aW9uLCdh bGwnKXx8WVVELmhhc0NsYXNzKHNlbGVjdGVkT3B0aW9uLCdwbGVhc2Utc2VsZWN0 Jykpe1lVRC5yZW1vdmVDbGFzcyhoZWFkaW5nTG9hZGVyLCdsb2FkaW5nJyk7cmVz ZXRTZWxlY3RzKG5leHRJZCk7cmV0dXJuIGZhbHNlO319CmlmKGN1cnJlbnRFbC52 YWx1ZT4wKXtjbGVhclRpbWVvdXQodGltZW91dCk7aWYoWVVDLmlzQ2FsbEluUHJv Z3Jlc3MoYWpheEhhbmRsZSkpe1lVQy5hYm9ydChhamF4SGFuZGxlKTt9CnJlc2V0 U2VsZWN0cyhuZXh0SWQpO3ZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn Y2F0ZWdvcnktbGV2ZWwtJytuZXh0SWQpO2lmKGVsKXtlbC5pbm5lckhUTUw9Jyc7 dmFyIG9wdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtvcHRp b24uZGlzYWJsZWQ9dHJ1ZTtvcHRpb24uY2xhc3NOYW1lPSdkaXNhYmxlZCc7b3B0 aW9uLnZhbHVlPS0xO29wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU ZXh0Tm9kZShZQUhPTy5TZWFyY2guQW5zd2Vycy5sYWJlbHMuY2F0ZWdvcnlXaWRn ZXQubG9hZGluZ0NhdGVnb3JpZXMpKTtlbC5hcHBlbmRDaGlsZChvcHRpb24pO30K aWYoY2FjaGVbY3VycmVudEVsLnZhbHVlXSl7dXBkYXRlU2VsZWN0KG5leHRJZCxj dXJyZW50RWwudmFsdWUpO1lVRC5yZW1vdmVDbGFzcyhoZWFkaW5nTG9hZGVyLCds b2FkaW5nJyk7fQplbHNle3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3Zh ciBzZWxlY3RzPWNhdGVnb3J5VG9vbFdyYXBwZXIuZ2V0RWxlbWVudHNCeVRhZ05h bWUoJ3NlbGVjdCcpO2FqYXhIYW5kbGU9WVVDLmFzeW5jUmVxdWVzdCgnR0VUJywn L2Rpci94aHJfbGlzdD9jYXRlZ29yeT0nK2N1cnJlbnRFbC52YWx1ZSx7c3VjY2Vz czpoYW5kbGVTdWNjZXNzLGZhaWx1cmU6aGFuZGxlRmFpbHVyZSxzY29wZTpjdXJy ZW50RWx9KTt9LDUwMCk7fX19CmZ1bmN0aW9uIGhhbmRsZUZhaWx1cmUobyl7dmFy IGN1cnJlbnRJZD10aGlzLmlkO3ZhciBuZXh0SWQ9Y3VycmVudElkLm1hdGNoKC9j YXRlZ29yeS1sZXZlbC0oXGQrKS8pO2lmKG5leHRJZCl7bmV4dElkPShwYXJzZUlu dChuZXh0SWRbMV0sMTApKzEpO30KZWxzZXtuZXh0SWQ9MDt9CllVRC5yZW1vdmVD bGFzcyhoZWFkaW5nTG9hZGVyLCdsb2FkaW5nJyk7Y2FjaGVbdGhpcy52YWx1ZV09 ZmFsc2U7dXBkYXRlU2VsZWN0KG5leHRJZCx0aGlzLnZhbHVlKTt9CmZ1bmN0aW9u IGhhbmRsZVN1Y2Nlc3Mobyl7dmFyIGN1cnJlbnRJZD10aGlzLmlkO3ZhciBuZXh0 SWQ9Y3VycmVudElkLm1hdGNoKC9jYXRlZ29yeS1sZXZlbC0oXGQrKS8pO2lmKG5l eHRJZCl7bmV4dElkPShwYXJzZUludChuZXh0SWRbMV0sMTApKzEpO30KZWxzZXtu ZXh0SWQ9MDt9CmlmKG8ucmVzcG9uc2VUZXh0KXt2YXIgZGF0YT1ZQUhPTy5sYW5n LkpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpO2lmKGRhdGEuc3VjY2Vzcz09PXRy dWUpe2lmKGRhdGEubWV0YVsnY2F0ZWdvcnktY291bnQnXT4wKXtjYWNoZVt0aGlz LnZhbHVlXT1kYXRhO3RoaXMucmVtb3ZlQXR0cmlidXRlKCduYW1lJyk7dXBkYXRl U2VsZWN0KG5leHRJZCx0aGlzLnZhbHVlKTt9CmVsc2V7Y2FjaGVbdGhpcy52YWx1 ZV09W107fX0KZWxzZXtjYWNoZVt0aGlzLnZhbHVlXT1mYWxzZTt9fQplbHNle2Nh Y2hlW3RoaXMudmFsdWVdPWZhbHNlO30KWVVELnJlbW92ZUNsYXNzKGhlYWRpbmdM b2FkZXIsJ2xvYWRpbmcnKTt9CmZ1bmN0aW9uIGxvYWRlcigpe3NlbGVjdEJ1dHRv bnM9WVVELmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NhdGVnb3J5LWJ1dHRvbnMn LCdkaXYnLCd5YW4tY2F0ZWdvcnktdG9vbCcpWzBdO2lmKFlVRC5nZXRFbGVtZW50 c0J5Q2xhc3NOYW1lKCdjYXRlZ29yeS1zZWxlY3Rpb24nLCdmaWVsZHNldCcpWzBd LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoMycpWzBdKXtoZWFkaW5nTG9hZGVyPVlV RC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjYXRlZ29yeS1zZWxlY3Rpb24nLCdm aWVsZHNldCcpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoMycpWzBdO30KWVVF Lm9uKGNhdGVnb3J5VG9vbFdyYXBwZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3Nl bGVjdCcpLCdjaGFuZ2UnLGhhbmRsZUNoYW5nZSk7WVVFLm9uKGNhdGVnb3J5VG9v bFdyYXBwZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NlbGVjdCcpLCdmb2N1cycs aGFuZGxlRm9jdXMpO1lVRS5vbihjYXRlZ29yeVRvb2xXcmFwcGVyLmdldEVsZW1l bnRzQnlUYWdOYW1lKCdzZWxlY3QnKSwnYmx1cicsaGFuZGxlQmx1cik7fQpyZXR1 cm57aW5pdDpmdW5jdGlvbigpe2lmKFlVRC5nZXQoJ3lhbi1jYXRlZ29yeS10b29s Jykpe2NhdGVnb3J5VG9vbFdyYXBwZXI9WVVELmdldCgneWFuLWNhdGVnb3J5LXRv b2wnKTtsb2FkZXIoKTt9fX07fSgpO1lBSE9PLlNlYXJjaC5BbnN3ZXJzLlNlYXJj aC5zZWxlY3RGaXg9ZnVuY3Rpb24oKXt2YXIgWVVEPVlBSE9PLnV0aWwuRG9tLFlV RT1ZQUhPTy51dGlsLkV2ZW50O3ZhciBzZWxlY3RDbGlja2VkPVtdO3ZhciBzZWxl Y3RXaWR0aD0yMDA7dmFyIGVmZmVjdGVkU2VsZWN0czt2YXIgc2VsZWN0UmVkcmF3 V2lkdGg9bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQoJ3JlZHJhd0F1dG9XaWR0 aCcpO3ZhciBzZWxlY3RSZWRyYXc9bmV3IFlBSE9PLnV0aWwuQ3VzdG9tRXZlbnQo J3NlbGVjdFdpZHRoQ29udGVudCcpO2Z1bmN0aW9uIGFkZEV2ZW50SGFuZGxlcnMo ZWwpe1lVRS5vbihlbCwnbW91c2VvdmVyJyxmdW5jdGlvbihlKXtzZWxlY3RSZWRy YXdXaWR0aC5maXJlKHRoaXMpO30pO1lVRS5vbihlbCwnY2hhbmdlJyxmdW5jdGlv bihlKXtzZWxlY3RSZWRyYXcuZmlyZSh0aGlzKTt9KTtZVUUub24oZWwsJ21vdXNl bGVhdmUnLGZ1bmN0aW9uKGUpe3ZhciBzZWxlY3RlZE9wdGlvbkl0ZW09WVVFLmdl dFRhcmdldChlKTtpZighc2VsZWN0Q2xpY2tlZFtzZWxlY3RlZE9wdGlvbkl0ZW0u bmFtZV0pCntZVUQucmVtb3ZlQ2xhc3MoZWZmZWN0ZWRTZWxlY3RzLCdzd2l0Y2gt aXQnKTtZVUQuc2V0U3R5bGUoZWZmZWN0ZWRTZWxlY3RzLCd3aWR0aCcsc2VsZWN0 V2lkdGgrJ3B4Jyk7c2VsZWN0Q2xpY2tlZD1bXTt9fSk7WVVFLm9uKGVsLCdmb2N1 c291dCcsZnVuY3Rpb24oZSl7c2VsZWN0UmVkcmF3LmZpcmUodGhpcyk7fSk7WVVF Lm9uKGVsLCdjbGljaycsZnVuY3Rpb24oZSl7dmFyIHNlbGVjdGVkT3B0aW9uSXRl bT1ZVUUuZ2V0VGFyZ2V0KGUpO3NlbGVjdENsaWNrZWRbc2VsZWN0ZWRPcHRpb25J dGVtLm5hbWVdPXRydWU7fSk7fQpmdW5jdGlvbiByZWRyYXdBdXRvV2lkdGgodHlw ZSxhcmdzKXtZVUQuYWRkQ2xhc3MoYXJnc1swXSwnc3dpdGNoLWl0Jyk7WVVELnNl dFN0eWxlKGFyZ3NbMF0sJ3Bvc2l0aW9uJywncmVsYXRpdmUnKTtZVUQuc2V0U3R5 bGUoYXJnc1swXSwnd2lkdGgnLCdhdXRvJyk7WVVELnNldFN0eWxlKGFyZ3NbMF0s J3otaW5kZXgnLCcyJyk7fQpmdW5jdGlvbiByZWRyYXdXaWR0aCh0eXBlLGFyZ3Mp e2lmKGFyZ3NbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09J3NlbGVjdCcpe1lV RC5yZW1vdmVDbGFzcyhhcmdzWzBdLCdzd2l0Y2gtaXQnKTtZVUQuc2V0U3R5bGUo YXJnc1swXSwnd2lkdGgnLHNlbGVjdFdpZHRoKydweCcpO30Kc2VsZWN0Q2xpY2tl ZD1bXTt9CnNlbGVjdFJlZHJhd1dpZHRoLnN1YnNjcmliZShyZWRyYXdBdXRvV2lk dGgpO3NlbGVjdFJlZHJhdy5zdWJzY3JpYmUocmVkcmF3V2lkdGgpO3JldHVybntp bml0OmZ1bmN0aW9uKCl7dmFyIHNlYXJjaEZvcm1GaWx0ZXI9ZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoJ3lhbi1zZWFyY2gtZmlsdGVyJyk7aWYoc2VhcmNoRm9ybUZp bHRlcil7dmFyIHNlbGVjdHM9c2VhcmNoRm9ybUZpbHRlci5nZXRFbGVtZW50c0J5 VGFnTmFtZSgnc2VsZWN0Jyk7aWYoc2VsZWN0cyYmWUFIT08uZW52LnVhLmllPj02 KXt2YXIgc2VsZWN0c1RvdGFsPXNlbGVjdHMubGVuZ3RoO2VmZmVjdGVkU2VsZWN0 cz1bXTtmb3IodmFyIGk9MDtpPHNlbGVjdHNUb3RhbDtpKyspe2lmKHNlbGVjdHNb aV0ub2Zmc2V0V2lkdGg+c2VsZWN0V2lkdGgpe1lVRC5zZXRTdHlsZShzZWxlY3Rz W2ldLCd3aWR0aCcsc2VsZWN0V2lkdGgrJ3B4Jyk7ZWZmZWN0ZWRTZWxlY3RzLnB1 c2goc2VsZWN0c1tpXSk7fX0KaWYoZWZmZWN0ZWRTZWxlY3RzLmxlbmd0aCl7YWRk RXZlbnRIYW5kbGVycyhlZmZlY3RlZFNlbGVjdHMpO319fX0sYWRkU2VsZWN0OmZ1 bmN0aW9uKGVsKXtpZihlbC5vZmZzZXRXaWR0aD5zZWxlY3RXaWR0aCl7WVVELnNl dFN0eWxlKGVsLCd3aWR0aCcsc2VsZWN0V2lkdGgrJ3B4Jyk7ZWZmZWN0ZWRTZWxl Y3RzLnB1c2goZWwpO2FkZEV2ZW50SGFuZGxlcnMoZWwpO319fTt9KCk7WUFIT08u U2VhcmNoLkFuc3dlcnMuU2VhcmNoLnNhdmVkU2VhcmNoPWZ1bmN0aW9uKCl7dmFy IERvbT1ZQUhPTy51dGlsLkRvbSxFdmVudD1ZQUhPTy51dGlsLkV2ZW50LERETT1Z QUhPTy51dGlsLkRyYWdEcm9wTWdyLENvbm5lY3Q9WUFIT08udXRpbC5Db25uZWN0 O2Z1bmN0aW9uIEREKGlkLHNHcm91cCxjb25maWcpe3RoaXMuY29udD1jb25maWcu Y29udDtERC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHR