Return-Path: Delivered-To: apmail-ws-axis-c-user-archive@www.apache.org Received: (qmail 20021 invoked from network); 19 Nov 2007 14:29:45 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 19 Nov 2007 14:29:45 -0000 Received: (qmail 33163 invoked by uid 500); 19 Nov 2007 14:29:31 -0000 Delivered-To: apmail-ws-axis-c-user-archive@ws.apache.org Received: (qmail 33111 invoked by uid 500); 19 Nov 2007 14:29:30 -0000 Mailing-List: contact axis-c-user-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: "Apache AXIS C User List" Reply-To: "Apache AXIS C User List" Delivered-To: mailing list axis-c-user@ws.apache.org Received: (qmail 33100 invoked by uid 99); 19 Nov 2007 14:29:30 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Nov 2007 06:29:30 -0800 X-ASF-Spam-Status: No, hits=-1.9 required=10.0 tests=RCVD_IN_DNSWL_MED,SPF_PASS,URIBL_BLACK,WHOIS_MYPRIVREG X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) Received: from [141.52.32.200] (HELO fzkmail3.ka.fzk.de) (141.52.32.200) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 19 Nov 2007 14:29:16 +0000 Received: from /spool/local by fzkmail3.ka.fzk.de with XMAIL for from ; Mon, 19 Nov 2007 15:28:56 +0100 Received: from fzkmsx3.ka.fzk.de [[141.52.92.3]] by fzkmail3.ka.fzk.de with XMAIL; Mon, 19 Nov 2007 15:28:54 +0100 Received: from [141.52.64.39] ([141.52.64.39]) by fzkmsx3.ka.fzk.de with Microsoft SMTPSVC(6.0.3790.3959); Mon, 19 Nov 2007 15:28:53 +0100 Message-ID: <47419DA5.5080902@ipe.fzk.de> Date: Mon, 19 Nov 2007 15:28:53 +0100 From: Michael Sutter Reply-To: Michael.Sutter@ipe.fzk.de User-Agent: Thunderbird 2.0.0.9 (X11/20071031) MIME-Version: 1.0 To: Apache AXIS C User List Subject: Re: custom error message with c server References: <4734992F.4080503@ipe.fzk.de> <1167.124.43.53.52.1194789758.squirrel@webmail1.pair.com> <47381750.2080902@ipe.fzk.de> <489947c0711120533u38b8f876ybe23ff979111879a@mail.gmail.com> <4738E227.6050504@wso2.com> <47398473.9010903@ipe.fzk.de> <473AE356.6010905@ipe.fzk.de> In-Reply-To: Content-Type: multipart/mixed; boundary="------------070401040808050503070608" X-OriginalArrivalTime: 19 Nov 2007 14:28:53.0562 (UTC) FILETIME=[82B9C1A0:01C82AB8] X-Virus-Checked: Checked by ClamAV on apache.org --------------070401040808050503070608 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hello Dimuthu, thanks for your example. I tested it and it worked fine. So I tried to integrate it in my service. But I think I make something wrong. As I understand I have to integrate the MyService_errors.c and MyService_errors.h, change the on_fault method in axis2_svc and replace the return axis2_svc_skel_TestService_on_fault(....) to return null. So I can throw a custom exception in my service. I'm right? If I do so my service always crashs with: raw_xml_in_out_msg_recv.c(109) Impl object for service 'ExceptionTestService' not set in message receiver. 100 :: Failed in creating DLL. If I understand the message right my service is missing some libs (previous answer). But this could not be - the service needs only the axis2 libs and all other services in my server are running fine. One service has the same functionality but without the custom error implementation. The service is compiled with: gcc -shared -o libExceptionTestService.so -I $AXIS2C_HOME/include/axis2-1.1/ -L $AXIS2C_HOME/lib/ -laxutil -laxis2_axiom -laxis2_engine -laxis2_parser -lpthread -laxis2_http_sender -laxis2_http_receiver -laxis2_libxml2 *.c If you have any ideas what is wrong in my service please tell me. I have attached the implementation. Regards Michael Dimuthu Gamage wrote: > Hi, > I have attached the edited skel code (not the original generated one), > and a java client which throws the exception as c service send a fault. > > > Thanks > Dimuthu > > On Nov 14, 2007 5:30 PM, Michael Sutter < Michael.Sutter@ipe.fzk.de > > wrote: > > Hello Dimuthu, > > thanks for your reply. I tested it - but it also throws no > exception in > the Java client. I only see the null return value in the client. > In the > service implementation I used: > > AXIS2_ERROR_SET(...) > return NULL; > > to use the on_fault method of axis2_svc_skel_TestService. Is this > right? > In the on fault method only > ns1 = axiom_namespace_create(env, " > http://www.w3.org/2003/05/soap-envelope", "ns1"); > works. If I use the other way the server crashs with Segmentation > fault. > The soap message of the response is: > > xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> > xmlns:ns1=" http://www.w3.org/2003/05/soap-envelope">My error > message to > be thrown! > > where I can see the fault - but maybe there is still something wrong? > > But I have another question left. When I use this way I only can send > one exception to the client - defined in the on fault method? > There is > no direct way to send different exceptions to the client depending on > the state of the service? When I want to do such I think I have to use > the way Samisa told? > > Regards Michael > > Dimuthu Gamage wrote: > > Hi Micheal, > > > > Your set_custom_error function only write the error message to > the log > > file, and not to the soap message, so to send a custom soap > fault you > > have to manually edit the axis2_svc_skel_TestService_on_fault. > Please > > edit it as the following and test. > > > > Java doesn't throw exception because the fault element is in wrong > > namespace. So It is corrected here. > > > > axiom_node_t* AXIS2_CALL > > axis2_svc_skel_TestService_on_fault(axis2_svc_skeleton_t > > *svc_skeleton, > > const axutil_env_t *env, axiom_node_t *node) > > { > > axiom_node_t *error_node = NULL; > > axiom_element_t *error_ele = NULL; > > axiom_namespace_t *ns1 = NULL; > > > > /* you can use either of following method to get the > namespace */ > > ns1 = axiom_namespace_create(env, " > > http://www.w3.org/2003/05/soap-envelope", > > "ns1"); > > > > /* or extract the samenmespace as the parent */ > > > > ns1 = axiom_element_get_namespace( > > axiom_node_get_data_element(node, env), > > env, > > node); > > > > error_ele = axiom_element_create(env, node, "fault", ns1, > > &error_node); > > axiom_element_set_text(error_ele, env, "*Whatever your > custom > > faul*t", > > error_node); > > return error_node; > > } > > > > Thanks > > Dimuthu > > > > > > On Nov 13, 2007 4:33 PM, Michael Sutter < > Michael.Sutter@ipe.fzk.de > > >> wrote: > > > > Hello, > > > > I read your links but they don't solved my problem. Maybe > I've done > > something wrong - so I explain exactly what I'm doing. In the > > service I > > implemented what I've found in Jira AXIS2C-678 > > > (https://issues.apache.org/jira/browse/AXIS2C-678?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel > > > > >) > > and the echo example of the c server implementation. I > implemented a > > custom error message method: > > > > void set_custom_error(const axutil_env_t *env, axis2_char_t > > *error_message) > > { > > axutil_error_set_error_message(env->error, > error_message); > > AXIS2_ERROR_SET(env->error, AXIS2_ERROR_LAST + 1, > > AXIS2_FAILURE); > > } > > > > and call it from the service method. But then there is no > custom error > > message delivered to the client. I only found the custom message > > in the > > log file of the axis server where it is not reachable from the > > client. I > > also monitored the SOAP messages and the custom error > message is not > > inside the response: > > > > > xmlns:soapenv=" > > > http://www.w3.org/2003/05/soap-envelope">TestService|http://auger.fzk.org > > failed > > > > With this response message the java client throws no > exception. I > > found > > that the response is exactly what the on_fault method of the > service > > creates. > > > > I also read the link from Samisa > > ( > > > http://www.nabble.com/Help-needed-on-building-custom-soap-fault-in-axis2c-tf4538948.html#a13053097 > ) > > but it has another content - I think. In the link the wsdl > has defined > > two exceptions and the author wanted to know how to use > them. The > > solution was to implement them in the on_fault method. > > > > Now to my questions: Have I done something wrong in the > implementation > > of the service or is it not possible to send custom error > messages to > > the client with my custom error method? Or have I always to > define > > the > > exceptions in the wsdl and implement them in the on_fault method > > of the > > service? > > > > I have attached my service - maybe someone can help me. > > > > Kind regards > > Michael > > > > Samisa Abeysinghe wrote: > > > Subra A Narayanan wrote: > > >> Michael, > > >> > > >> If you are setting the soap fault correctly on your server > > side, your > > >> java client when it receives the soap response back with > the soap > > >> fault in it, should automatically throw an exception. You > can then > > >> retrieve the exception using ex.message. > > >> > > >> May be someone from the Axis2 team can correct me if I am > wrong. > > >> > > > You are absolutely correct. > > > BTW, please follow this thread for further information: > > > > > > http://www.nabble.com/Help-needed-on-building-custom-soap-fault-in-axis2c-tf4538948.html#a13053097 > > > > > > > > > > Thanks, > > > Samisa... > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: > axis-c-user-unsubscribe@ws.apache.org > > > > > > > For additional commands, e-mail: > axis-c-user-help@ws.apache.org > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: > axis-c-user-unsubscribe@ws.apache.org > > > > > > For additional commands, e-mail: > axis-c-user-help@ws.apache.org > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org > > For additional commands, e-mail: axis-c-user-help@ws.apache.org > > > --------------070401040808050503070608 Content-Type: application/x-gzip; name="exceptionTest.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="exceptionTest.tar.gz" ZXhjZXB0aW9uVGVzdC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUA MDAxMjA1NAAwMDExNjExADAwMDAwMDAwMDAwADEwNzIwMzE0NzExADAxNDEwNQAgNQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHN1dHRl ci1tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaXBldXNlcnMAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABleGNlcHRpb25UZXN0L3NyYy8AAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDAwMDc1NQAwMDEyMDU0ADAwMTE2MTEAMDAwMDAwMDAwMDAA MTA3MjAzMTU2MzIAMDE0Njc3ACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABp cGV1c2VycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGV4 Y2VwdGlvblRlc3Qvc3JjL2F4aXMyX3NrZWxfRXhjZXB0aW9uVGVzdFNlcnZpY2UuYwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAw MTIwNTQAMDAxMTYxMQAwMDAwMDAwMjQwMwAxMDcyMDMxNTYyNwAwMjMzMTEAIDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABzdXR0ZXIt bQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwZXVzZXJzAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgogICAgLyoqCiAgICAgKiBheGlzMl9za2VsX0V4 Y2VwdGlvblRlc3RTZXJ2aWNlLmMKICAgICAqCiAgICAgKiBUaGlzIGZpbGUgd2FzIGF1dG8t Z2VuZXJhdGVkIGZyb20gV1NETCBmb3IgIkV4Y2VwdGlvblRlc3RTZXJ2aWNlfGh0dHA6Ly9h dWdlci5memsub3JnIiBzZXJ2aWNlCiAgICAgKiBieSB0aGUgQXBhY2hlIEF4aXMyL0MgdmVy c2lvbjogU05BUFNIT1QgIEJ1aWx0IG9uIDogT2N0IDAyLCAyMDA3ICgwODoyMzoyMCBHTVQr MDA6MDApCiAgICAgKiBheGlzMl9za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNlIEF4aXMyL0Mg c2tlbGV0b24gZm9yIHRoZSBheGlzU2VydmljZQogICAgICovCgogICAgICNpbmNsdWRlICJh eGlzMl9za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNlLmgiCiAgICAgCgoJCSAKICAgICAgICAv KioKICAgICAgICAgKiBhdXRvIGdlbmVyYXRlZCBmdW5jdGlvbiBkZWZpbml0aW9uIHNpZ25h dHVyZQogICAgICAgICAqIGZvciAidmVyc2lvbnxodHRwOi8vYXVnZXIuZnprLm9yZyIgb3Bl cmF0aW9uLgogICAgICAgICAKICAgICAgICAgKiBAcGFyYW0gdmVyc2lvbgogICAgICAgICAq LwogICAgICAgIGFkYl92ZXJzaW9uUmVzcG9uc2VfdCogYXhpczJfc2tlbF9FeGNlcHRpb25U ZXN0U2VydmljZV92ZXJzaW9uIChjb25zdCBheHV0aWxfZW52X3QgKmVudiAgLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRiX3ZlcnNpb25fdCog dmVyc2lvbiApCiAgICAgICAgewogICAgICAgICAgcHJpbnRmKCJVZWJlcmdhYmVzdHJpbmcg JXMgXG4iLCBhZGJfdmVyc2lvbl9nZXRfaW5wdXQodmVyc2lvbiwgZW52KSk7CiAgICAgICAg ICBhZGJfdmVyc2lvblJlc3BvbnNlX3QqIHJldHVybl9ub2RlID0gYWRiX3ZlcnNpb25SZXNw b25zZV9jcmVhdGUoZW52ICk7CiAgICAgICAgICAKICAgICAgICAgIGNoYXIgKnJldHVyblN0 cmluZyA9KGNoYXIqKW1hbGxvYygyMCk7CiAgICAgICAgICBzdHJjcHkocmV0dXJuU3RyaW5n LCJ2ZXJzaW9uIDAuMC4xIik7CgogICAgICAgICAgIEFYSVMyX0VSUk9SX1NFVChlbnYtPmVy cm9yLCBNWV9FWENFUFRJT04sIEFYSVMyX0ZBSUxVUkUpOwoKICAgICAgICAgICAgcmV0dXJu IE5VTEw7CgogICAgICAgICAgLy9jaGFyIHJldHVyblN0cmluZ1tdID0gInZlcnNpb24gMC4w LjEiOwoJICBhZGJfdmVyc2lvblJlc3BvbnNlX3NldF9yZXR1cm4ocmV0dXJuX25vZGUsIGVu diwgcmV0dXJuU3RyaW5nKTsKICAgICAgICAgIHJldHVybiByZXR1cm5fbm9kZTsKICAgICAg ICB9CiAgICAgCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZXhjZXB0 aW9uVGVzdC9zcmMvYXhpczJfc2tlbF9FeGNlcHRpb25UZXN0U2VydmljZS5oAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NDQAMDAxMjA1 NAAwMDExNjExADAwMDAwMDAyMTE1ADEwNzIwMzEyMzIyADAyMzMwMwAgMAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHN1dHRlci1tAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAaXBldXNlcnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAKCiAgICAvKioKICAgICAqIGF4aXMyX3NrZWxfRXhjZXB0 aW9uVGVzdFNlcnZpY2UuaAogICAgICoKICAgICAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5l cmF0ZWQgZnJvbSBXU0RMIGZvciAiRXhjZXB0aW9uVGVzdFNlcnZpY2V8aHR0cDovL2F1Z2Vy LmZ6ay5vcmciIHNlcnZpY2UKICAgICAqIGJ5IHRoZSBBcGFjaGUgQXhpczIvQyB2ZXJzaW9u OiBTTkFQU0hPVCAgQnVpbHQgb24gOiBPY3QgMDIsIDIwMDcgKDA4OjIzOjIwIEdNVCswMDow MCkKICAgICAqIGF4aXMyX3NrZWxfRXhjZXB0aW9uVGVzdFNlcnZpY2UgQXhpczIvQyBza2Vs ZXRvbiBmb3IgdGhlIGF4aXNTZXJ2aWNlLSBIZWFkZXIgZmlsZQogICAgICovCgoKCSNpbmNs dWRlIDxheGlzMl9zdmNfc2tlbGV0b24uaD4KCSNpbmNsdWRlIDxheHV0aWxfbG9nX2RlZmF1 bHQuaD4KCSNpbmNsdWRlIDxheHV0aWxfZXJyb3JfZGVmYXVsdC5oPgoJI2luY2x1ZGUgPGF4 aW9tX3RleHQuaD4KCSNpbmNsdWRlIDxheGlvbV9ub2RlLmg+CgkjaW5jbHVkZSA8YXhpb21f ZWxlbWVudC5oPgogICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICNpbmNsdWRlICJNeVNlcnZp Y2VfZXJyb3JzLmgiCgogICAKICAgICAjaW5jbHVkZSAgImFkYl92ZXJzaW9uUmVzcG9uc2Uu aCIKICAgIAogICAgICNpbmNsdWRlICJhZGJfdmVyc2lvbi5oIgogICAgCgoJI2lmZGVmIF9f Y3BsdXNwbHVzCglleHRlcm4gIkMiIHsKCSNlbmRpZgoKICAgICAKCgkJIAogICAgICAgIC8q KgogICAgICAgICAqIGF1dG8gZ2VuZXJhdGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCiAgICAg ICAgICogZm9yICJ2ZXJzaW9ufGh0dHA6Ly9hdWdlci5memsub3JnIiBvcGVyYXRpb24uCiAg ICAgICAgIAogICAgICAgICAqIEBwYXJhbSB2ZXJzaW9uCiAgICAgICAgICovCiAgICAgICAg YWRiX3ZlcnNpb25SZXNwb25zZV90KiBheGlzMl9za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNl X3ZlcnNpb24gKGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52ICAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFkYl92ZXJzaW9uX3QqIHZlcnNpb24gKTsKICAg ICAKCgkjaWZkZWYgX19jcGx1c3BsdXMKCX0KCSNlbmRpZgogICAgCgoAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABleGNlcHRpb25U ZXN0L3NyYy9hZGJfTXlFeGNlcHRpb24uYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAw MTE2MTEAMDAwMDAwMjYyNDEAMTA3MjAzMDE2MTEAMDIwMTEyACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABpcGV1c2VycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAogICAgICAgLyoqCiAgICAgICAgKiBhZGJfTXlFeGNlcHRpb24u aAogICAgICAgICoKICAgICAgICAqIFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgZnJv bSBXU0RMCiAgICAgICAgKiBieSB0aGUgQXBhY2hlIEF4aXMyL0MgdmVyc2lvbjogU05BUFNI T1QgIEJ1aWx0IG9uIDogT2N0IDAyLCAyMDA3ICgwODoyMzozOSBHTVQrMDA6MDApCiAgICAg ICAgKgogICAgICAgICovCgogICAgICAgICNpbmNsdWRlICJhZGJfTXlFeGNlcHRpb24uaCIK ICAgICAgICAgIAogICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAqIGltcGxtZW50 YXRpb24gb2YgdGhlIE15RXhjZXB0aW9ufGh0dHA6Ly9hdWdlci5memsub3JnIGVsZW1lbnQK ICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIAoKCiAgICAgICAgc3RydWN0IGFkYl9N eUV4Y2VwdGlvbgogICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBheHV0 aWxfcW5hbWVfdCogcW5hbWU7CiAgICAgICAgICAgIGF4aXMyX2NoYXJfdCogYXR0cmliX3Rl eHQ7CiAgICAgICAgICAgIAogICAgICAgIH07CgoKICAgICAgIC8qKioqKioqKioqKioqKioq KioqKioqKioqIEZ1bmN0aW9uIEltcGxtZW50YXRpb25zICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwogICAgICAgIEFYSVMyX0VYVEVSTiBhZGJfTXlFeGNlcHRpb25fdCog QVhJUzJfQ0FMTAogICAgICAgIGFkYl9NeUV4Y2VwdGlvbl9jcmVhdGUoCiAgICAgICAgICAg IGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52ICkKICAgICAgICB7CiAgICAgICAgICAgIGFkYl9N eUV4Y2VwdGlvbl90ICpfTXlFeGNlcHRpb24gPSBOVUxMOwogICAgICAgICAgICAKICAgICAg ICAgICAgICBheHV0aWxfcW5hbWVfdCogcW5hbWUgPSBOVUxMOwogICAgICAgICAgICAKICAg ICAgICAgICAgQVhJUzJfRU5WX0NIRUNLKGVudiwgTlVMTCk7CgogICAgICAgICAgICBfTXlF eGNlcHRpb24gPSAoYWRiX015RXhjZXB0aW9uX3QgKikgQVhJUzJfTUFMTE9DKGVudi0+CiAg ICAgICAgICAgICAgICBhbGxvY2F0b3IsIHNpemVvZihhZGJfTXlFeGNlcHRpb25fdCkpOwoK ICAgICAgICAgICAgaWYoTlVMTCA9PSBfTXlFeGNlcHRpb24pCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIEFYSVMyX0VSUk9SX1NFVChlbnYtPmVycm9yLCBBWElTMl9FUlJPUl9O T19NRU1PUlksIEFYSVMyX0ZBSUxVUkUpOwogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG1lbXNldChfTXlFeGNlcHRpb24sIDAsIHNp emVvZihhZGJfTXlFeGNlcHRpb25fdCkpOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAg cW5hbWUgPSAgYXh1dGlsX3FuYW1lX2NyZWF0ZSAoZW52LAogICAgICAgICAgICAgICAgICAg ICAgICAiTXlFeGNlcHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2F1 Z2VyLmZ6ay5vcmciLAogICAgICAgICAgICAgICAgICAgICAgICAibnMxIik7CgogICAgICAg ICAgICAgIF9NeUV4Y2VwdGlvbi0+cW5hbWUgPSBxbmFtZTsKICAgICAgICAgICAgCgogICAg ICAgICAgICByZXR1cm4gX015RXhjZXB0aW9uOwogICAgICAgIH0KCiAgICAgICAgYXhpczJf c3RhdHVzX3QgQVhJUzJfQ0FMTAogICAgICAgIGFkYl9NeUV4Y2VwdGlvbl9mcmVlICgKICAg ICAgICAgICAgICAgIGFkYl9NeUV4Y2VwdGlvbl90KiBfTXlFeGNlcHRpb24sCiAgICAgICAg ICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudikKICAgICAgICB7CiAgICAgICAgICAg IAogICAgICAgICAgICAKCiAgICAgICAgICAgIEFYSVMyX0VOVl9DSEVDSyhlbnYsIEFYSVMy X0ZBSUxVUkUpOwoKICAgICAgICAgICAgCgogICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgIGlmKCBfTXlFeGNlcHRpb24tPmF0dHJpYl90ZXh0ICE9IE5V TEwpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgQVhJUzJfRlJFRSggZW52LT4gYWxsb2NhdG9yLCBf TXlFeGNlcHRpb24tPmF0dHJpYl90ZXh0KTsKICAgICAgICAgICAgICAgICAgIF9NeUV4Y2Vw dGlvbi0+YXR0cmliX3RleHQgPSBOVUxMOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgaWYoX015 RXhjZXB0aW9uLT5xbmFtZSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBh eHV0aWxfcW5hbWVfZnJlZSAoX015RXhjZXB0aW9uLT5xbmFtZSwgZW52KTsKICAgICAgICAg ICAgICAgICAgX015RXhjZXB0aW9uLT5xbmFtZSA9IE5VTEw7CiAgICAgICAgICAgICAgfQog ICAgICAgICAgICAKCiAgICAgICAgICAgIGlmKF9NeUV4Y2VwdGlvbikKICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgQVhJUzJfRlJFRSggZW52LT5hbGxvY2F0b3IsIF9NeUV4Y2Vw dGlvbik7CiAgICAgICAgICAgICAgICBfTXlFeGNlcHRpb24gPSBOVUxMOwogICAgICAgICAg ICB9CiAgICAgICAgICAgIHJldHVybiBBWElTMl9TVUNDRVNTOwogICAgICAgIH0KCiAgICAg ICAgICAKICAgICAgICAgICBheHV0aWxfcW5hbWVfdCogQVhJUzJfQ0FMTAogICAgICAgICAg IGFkYl9NeUV4Y2VwdGlvbl9nZXRfcW5hbWUgKAogICAgICAgICAgICAgICAgICAgYWRiX015 RXhjZXB0aW9uX3QqIF9NeUV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGF4 dXRpbF9lbnZfdCAqZW52KQogICAgICAgICAgIHsKICAgICAgICAgICAgICAgQVhJUzJfRU5W X0NIRUNLKGVudiwgQVhJUzJfRkFJTFVSRSk7CgogICAgICAgICAgICAgICByZXR1cm4gX015 RXhjZXB0aW9uLT4gcW5hbWU7CiAgICAgICAgICAgfQogICAgICAgIAoKICAgICAgICBheGlz Ml9zdGF0dXNfdCBBWElTMl9DQUxMCiAgICAgICAgYWRiX015RXhjZXB0aW9uX2Rlc2VyaWFs aXplKAogICAgICAgICAgICAgICAgYWRiX015RXhjZXB0aW9uX3QqIF9NeUV4Y2VwdGlvbiwK ICAgICAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52LAogICAgICAgICAgICAg ICAgYXhpb21fbm9kZV90KiBwYXJlbnQpCiAgICAgICAgewogICAgICAgICAgYXhpczJfc3Rh dHVzX3Qgc3RhdHVzID0gQVhJUzJfU1VDQ0VTUzsKICAgICAgICAgICAKICAgICAgICAgICAg IGF4aXMyX2NoYXJfdCogdGV4dF92YWx1ZSA9IE5VTEw7CiAgICAgICAgICAgICBheHV0aWxf cW5hbWVfdCAqcW5hbWUgPSBOVUxMOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBh eGlvbV9uYW1lc3BhY2VfdCAqbnMxID0gTlVMTDsKICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgYXhpb21fbm9kZV90ICpmaXJzdF9ub2RlID0gTlVMTDsKICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgYXhpb21fbm9kZV90ICpjdXJyZW50X25v ZGUgPSBOVUxMOwogICAgICAgICAgICAgICBheGlvbV9lbGVtZW50X3QgKmN1cnJlbnRfZWxl bWVudCA9IE5VTEw7CiAgICAgICAgICAgIAogICAgICAgICAgICBBWElTMl9FTlZfQ0hFQ0so ZW52LCBBWElTMl9GQUlMVVJFKTsKCiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIG5z MSA9IGF4aW9tX25hbWVzcGFjZV9jcmVhdGUgKGVudiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2F1Z2VyLmZ6ay5vcmciLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuczEiKTsKICAgICAgICAgICAgICAK ICAgICAgICAgICAgICBpZiAoIE5VTEwgPT0gcGFyZW50ICkKICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAvKiogVGhpcyBzaG91bGQgYmUgY2hlY2tlZCBhYm92ZSAqLwogICAg ICAgICAgICAgICAgQVhJUzJfTE9HX0VSUk9SKGVudi0+bG9nLCBBWElTMl9MT0dfU0ksICJO VUxMIGVsZW1lbmV0IGZvciBNeUV4Y2VwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgJWQgOjogJXMiLCBlbnYtPmVycm9yLT5lcnJvcl9u dW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB WElTMl9FUlJPUl9HRVRfTUVTU0FHRShlbnYtPmVycm9yKSk7CiAgICAgICAgICAgICAgICBy ZXR1cm4gQVhJUzJfRkFJTFVSRTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgIGN1cnJlbnRfZWxlbWVudCA9IChheGlvbV9lbGVtZW50X3QgKilh eGlvbV9ub2RlX2dldF9kYXRhX2VsZW1lbnQoIHBhcmVudCwgZW52KTsKICAgICAgICAgICAg ICAgICAgICBxbmFtZSA9IGF4aW9tX2VsZW1lbnRfZ2V0X3FuYW1lKCBjdXJyZW50X2VsZW1l bnQsIGVudiwgcGFyZW50KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGF4dXRpbF9xbmFt ZV9lcXVhbHMoIHFuYW1lLCBlbnYsIF9NeUV4Y2VwdGlvbi0+IHFuYW1lICkgKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlyc3Rfbm9kZSA9IGF4aW9tX25vZGVfZ2V0X2ZpcnN0X2NoaWxkKCBw YXJlbnQsIGVudik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgIEFYSVMyX0xPR19FUlJPUihlbnYtPmxvZywgQVhJ UzJfTE9HX1NJLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCBpbiBi dWlsZGluZyBhZGIgb2JqZWN0IGZvciBNeUV4Y2VwdGlvbiA6ICIKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIldyb25nIFhNTCB0byBkZXNlcmlhbGl6ZSIpOwogICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFYSVMyX0ZB SUxVUkU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAoKICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAg ICAgICAgICAgICAgKiBidWlsZGluZyB0ZXh0IGVsZW1lbnQKICAgICAgICAgICAgICAgICAg ICAgICovCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3VycmVudF9ub2RlID0gZmlyc3Rfbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoY3VycmVudF9ub2RlICAmJiBheGlvbV9ub2RlX2dldF9kYXRhX2VsZW1l bnQoIGN1cnJlbnRfbm9kZSwgZW52KSAmJiAhYXh1dGlsX3N0cmNtcCgidGV4dCIsIAogICAg ICAgICAgICAgICAgICAgICAgICAgICBheGlvbV9lbGVtZW50X2dldF9sb2NhbG5hbWUoKGF4 aW9tX2VsZW1lbnRfdCAqKWF4aW9tX25vZGVfZ2V0X2RhdGFfZWxlbWVudCggY3VycmVudF9u b2RlLCBlbnYpLCBlbnYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy cmVudF9lbGVtZW50ID0gKGF4aW9tX2VsZW1lbnRfdCAqKWF4aW9tX25vZGVfZ2V0X2RhdGFf ZWxlbWVudCggY3VycmVudF9ub2RlLCBlbnYpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRleHRfdmFsdWUgPSBheGlvbV9lbGVtZW50X2dldF90ZXh0KGN1cnJl bnRfZWxlbWVudCwgZW52LCBjdXJyZW50X25vZGUgKTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBhZGJfTXlFeGNlcHRpb25fc2V0X3RleHQoIF9N eUV4Y2VwdGlvbiwgZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF92YWx1ZSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiggQVhJUzJfRkFJTFVSRSA9PSAgc3RhdHVzKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB WElTMl9MT0dfRVJST1IoZW52LT5sb2csIEFYSVMyX0xPR19TSSwgImZhaWxlZCBpbiBzZXR0 aW5nIHRoZSB2YWx1ZSBmb3IgdGV4dCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgJWQgOjogJXMiLCBlbnYtPmVycm9yLT5l cnJvcl9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFYSVMyX0VSUk9SX0dFVF9NRVNTQUdFKGVudi0+ZXJyb3IpKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBWElTMl9GQUlM VVJFOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAg IHJldHVybiBzdGF0dXM7CiAgICAgICB9CgogICAgICAgIAogICAgICAgIAogICAgICAgIGF4 aW9tX25vZGVfdCogQVhJUzJfQ0FMTAogICAgICAgIGFkYl9NeUV4Y2VwdGlvbl9zZXJpYWxp emUoCiAgICAgICAgICAgICAgICBhZGJfTXlFeGNlcHRpb25fdCogX015RXhjZXB0aW9uLAog ICAgICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYsIGF4aW9tX25vZGVfdCog cGFyZW50LCBpbnQgaGFzX3BhcmVudCwgaW50IHRhZ19jbG9zZWQpCiAgICAgICAgewogICAg ICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYXhpb21fbmFtZXNwYWNl X3QgKm5zMSA9IE5VTEw7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgYXhp czJfY2hhcl90ICp0ZXh0X3ZhbHVlXzE7CiAgICAgICAgICAgICAgICAgICAgYXhpczJfY2hh cl90ICp0ZXh0X3ZhbHVlXzFfdGVtcDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgYXhpb21fbm9kZV90ICpjdXJyZW50X25vZGUgPSBOVUxMOwogICAgICAgICAgICAg ICBheGlvbV9lbGVtZW50X3QgKmN1cnJlbnRfZWxlbWVudCA9IE5VTEw7CiAgICAgICAgICAg ICAgIGF4aXMyX2NoYXJfdCAqc3RhcnRfaW5wdXRfc3RyID0gTlVMTDsKICAgICAgICAgICAg ICAgYXhpczJfY2hhcl90ICplbmRfaW5wdXRfc3RyID0gTlVMTDsKICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHN0YXJ0X2lucHV0X3N0cl9sZW4gPSAwOwogICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgZW5kX2lucHV0X3N0cl9sZW4gPSAwOwogICAgICAgICAgICAgCiAgICAg ICAgICAgICAgIGF4aW9tX2RhdGFfc291cmNlX3QgKmRhdGFfc291cmNlID0gTlVMTDsKICAg ICAgICAgICAgICAgYXh1dGlsX3N0cmVhbV90ICpzdHJlYW0gPSBOVUxMOwogICAgICAgICAg ICAKICAgICAgICAgICAgQVhJUzJfRU5WX0NIRUNLKGVudiwgTlVMTCk7CgogICAgICAgICAg ICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgbnMxID0gYXhpb21fbmFtZXNwYWNl X2NyZWF0ZSAoZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJodHRwOi8vYXVnZXIuZnprLm9yZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIm5zMSIpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlm KCBwYXJlbnQgPT0gTlVMTCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICBjdXJyZW50X2VsZW1lbnQgPSBheGlvbV9lbGVtZW50X2NyZWF0ZSAoZW52LCBwYXJlbnQs ICJNeUV4Y2VwdGlvbiIsIG5zMSAsICZjdXJyZW50X25vZGUpOwogICAgICAgICAgICAgICAg ICAgIGF4aW9tX2VsZW1lbnRfc2V0X25hbWVzcGFjZSggY3VycmVudF9lbGVtZW50LCBlbnYs IG5zMSwgY3VycmVudF9ub2RlKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICBwYXJlbnQgPSBjdXJyZW50X25vZGU7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYoaGFzX3BhcmVudCkKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICBkYXRhX3NvdXJjZSA9IChheGlvbV9kYXRhX3Nv dXJjZV90ICopYXhpb21fbm9kZV9nZXRfZGF0YV9lbGVtZW50KHBhcmVudCwgZW52KTsKICAg ICAgICAgICAgICAgICAgICBpZiAoIWRhdGFfc291cmNlKQogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBheGlvbV9k YXRhX3NvdXJjZV9nZXRfc3RyZWFtKGRhdGFfc291cmNlLCBlbnYpOyAvKiBhc3N1bWUgcGFy ZW50IGlzIG9mIHR5cGUgZGF0YSBzb3VyY2UgKi8KICAgICAgICAgICAgICAgICAgICBpZiAo IXN0cmVhbSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X25vZGUgPSBwYXJl bnQ7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICBkYXRhX3NvdXJjZSA9IGF4aW9tX2RhdGFfc291cmNlX2NyZWF0ZShlbnYs IHBhcmVudCwgJmN1cnJlbnRfbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0g YXhpb21fZGF0YV9zb3VyY2VfZ2V0X3N0cmVhbShkYXRhX3NvdXJjZSwgZW52KTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIHBhcnNpbmcg dGV4dCBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAg ICAgICAKCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXJ0X2lucHV0X3N0ciA9ICI8bnMxOnRleHQ+IjsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBzdGFy dF9pbnB1dF9zdHJfbGVuID0gYXh1dGlsX3N0cmxlbihzdGFydF9pbnB1dF9zdHIpOwogICAg ICAgICAgICAgICAgICAgICAgICBlbmRfaW5wdXRfc3RyID0gIjwvbnMxOnRleHQ+IjsKICAg ICAgICAgICAgICAgICAgICAgICAgZW5kX2lucHV0X3N0cl9sZW4gPSBheHV0aWxfc3RybGVu KGVuZF9pbnB1dF9zdHIpOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZXh0X3ZhbHVlXzEgPSBfTXlFeGNlcHRpb24tPmF0dHJpYl90ZXh0Owog ICAgICAgICAgICAgICAgICAgICAgICAgICBheHV0aWxfc3RyZWFtX3dyaXRlKHN0cmVhbSwg ZW52LCBzdGFydF9pbnB1dF9zdHIsIHN0YXJ0X2lucHV0X3N0cl9sZW4pOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfdmFs dWVfMV90ZW1wID0gYXh1dGlsX3htbF9xdW90ZV9zdHJpbmcoZW52LCB0ZXh0X3ZhbHVlXzEs IEFYSVMyX1RSVUUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dF92YWx1 ZV8xX3RlbXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGF4dXRpbF9zdHJlYW1fd3JpdGUoc3RyZWFtLCBlbnYsIHRleHRf dmFsdWVfMV90ZW1wLCBheHV0aWxfc3RybGVuKHRleHRfdmFsdWVfMV90ZW1wKSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBWElTMl9GUkVFKGVudi0+YWxsb2NhdG9yLCB0 ZXh0X3ZhbHVlXzFfdGVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheHV0aWxfc3RyZWFtX3dyaXRlKHN0 cmVhbSwgZW52LCB0ZXh0X3ZhbHVlXzEsIGF4dXRpbF9zdHJsZW4odGV4dF92YWx1ZV8xKSk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXh1dGlsX3N0cmVhbV93cml0ZShzdHJlYW0sIGVudiwgZW5kX2lucHV0X3N0ciwgZW5k X2lucHV0X3N0cl9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg cmV0dXJuIHBhcmVudDsKICAgICAgICB9CgoKICAgICAgICAKICAgICAgICAgICAgLyoqCiAg ICAgICAgICAgICAqIGdldHRlciBmb3IgdGV4dC4KICAgICAgICAgICAgICovCiAgICAgICAg ICAgIGF4aXMyX2NoYXJfdCogQVhJUzJfQ0FMTAogICAgICAgICAgICBhZGJfTXlFeGNlcHRp b25fZ2V0X3RleHQoCiAgICAgICAgICAgICAgICAgICAgYWRiX015RXhjZXB0aW9uX3QqIF9N eUV4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVu dikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEFYSVMyX0VOVl9DSEVDSyhlbnYs IEFYSVMyX0ZBSUxVUkUpOwoKICAgICAgICAgICAgICAgIHJldHVybiBfTXlFeGNlcHRpb24t PmF0dHJpYl90ZXh0OwogICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyoqCiAgICAgICAg ICAgICAqIHNldHRlciBmb3IgdGV4dAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgYXhp czJfc3RhdHVzX3QgQVhJUzJfQ0FMTAogICAgICAgICAgICBhZGJfTXlFeGNlcHRpb25fc2V0 X3RleHQoCiAgICAgICAgICAgICAgICAgICAgYWRiX015RXhjZXB0aW9uX3QqIF9NeUV4Y2Vw dGlvbiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudiwKICAg ICAgICAgICAgICAgICAgICBheGlzMl9jaGFyX3QqICBwYXJhbV90ZXh0KQogICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgQVhJUzJfRU5WX0NIRUNL KGVudiwgQVhJUzJfRkFJTFVSRSk7CiAgICAgICAgICAgICAgICBpZighX015RXhjZXB0aW9u KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBBWElTMl9G QUlMVVJFOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICBfTXlFeGNlcHRp b24tPmF0dHJpYl90ZXh0ID0gKGF4aXMyX2NoYXJfdCAqKWF4dXRpbF9zdHJkdXAoZW52LCBw YXJhbV90ZXh0KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHJldHVy biBBWElTMl9TVUNDRVNTOwogICAgICAgICAgICAgfQoKICAgICAgICAgICAgCgoAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABleGNlcHRpb25UZXN0L3NyYy9hZGJfTXlFeGNlcHRpb24u aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAwMTE2MTEAMDAwMDAwMDc3NzAAMTA3MjAz MDE2MTEAMDIwMTI1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpcGV1c2Vy cwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKICAgICAg ICAjaWZuZGVmIEFEQl9NWUVYQ0VQVElPTl9ICiAgICAgICAgI2RlZmluZSBBREJfTVlFWENF UFRJT05fSAoKICAgICAgICAvKioKICAgICAgICAqIGFkYl9NeUV4Y2VwdGlvbi5oCiAgICAg ICAgKgogICAgICAgICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwK ICAgICAgICAqIGJ5IHRoZSBBcGFjaGUgQXhpczIvSmF2YSB2ZXJzaW9uOiBTTkFQU0hPVCAg QnVpbHQgb24gOiBPY3QgMDIsIDIwMDcgKDA4OjIzOjM5IEdNVCswMDowMCkKICAgICAgICAq LwoKICAgICAgICAKCiAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAgICAgI2luY2x1 ZGUgPGF4aW9tLmg+CiAgICAgICAgI2luY2x1ZGUgPGF4aXMyX3V0aWwuaD4KICAgICAgICAj aW5jbHVkZSA8YXhpb21fc29hcC5oPgogICAgICAgICNpbmNsdWRlIDxheGlzMl9jbGllbnQu aD4KCiAgICAgICAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgICAgICAgZXh0ZXJuICJDIgogICAg ICAgIHsKICAgICAgICAjZW5kaWYKCiAgICAgICAgI2RlZmluZSBBWElTMl9ERUZBVUxUX0RJ R0lUX0xJTUlUIDY0CiAgICAgICAvKioKICAgICAgICAqICBhZGJfTXlFeGNlcHRpb24gY2xh c3MKICAgICAgICAqLwogICAgICAgIHR5cGVkZWYgc3RydWN0IGFkYl9NeUV4Y2VwdGlvbiBh ZGJfTXlFeGNlcHRpb25fdDsKCiAgICAgICAgLyoqCiAgICAgICAgICogQ29uc3RydWN0b3Ig Zm9yIGNyZWF0aW5nIGFkYl9NeUV4Y2VwdGlvbl90CiAgICAgICAgICogQHBhcmFtIGVudiBw b2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVjdAogICAgICAgICAqIEByZXR1cm4gbmV3bHkg Y3JlYXRlZCBhZGJfTXlFeGNlcHRpb25fdCBvYmplY3QKICAgICAgICAgKi8KICAgICAgICBB WElTMl9FWFRFUk4gYWRiX015RXhjZXB0aW9uX3QqIEFYSVMyX0NBTEwKICAgICAgICBhZGJf TXlFeGNlcHRpb25fY3JlYXRlKAogICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVu diApOwoKICAgICAgICAvKioKICAgICAgICAgKiBGcmVlIGFkYl9NeUV4Y2VwdGlvbl90IG9i amVjdAogICAgICAgICAqIEBwYXJhbSAgX015RXhjZXB0aW9uYWRiX015RXhjZXB0aW9uX3Qg b2JqZWN0IHRvIGZyZWUKICAgICAgICAgKiBAcGFyYW0gZW52IHBvaW50ZXIgdG8gZW52aXJv bm1lbnQgc3RydWN0CiAgICAgICAgICogQHJldHVybiBBWElTMl9TVUNDRVNTIG9uIHN1Y2Nl c3MsIGVsc2UgQVhJUzJfRkFJTFVSRQogICAgICAgICAqLwogICAgICAgIGF4aXMyX3N0YXR1 c190IEFYSVMyX0NBTEwKICAgICAgICBhZGJfTXlFeGNlcHRpb25fZnJlZSAoCiAgICAgICAg ICAgIGFkYl9NeUV4Y2VwdGlvbl90KiBfTXlFeGNlcHRpb24sCiAgICAgICAgICAgIGNvbnN0 IGF4dXRpbF9lbnZfdCAqZW52KTsKCiAgICAgICAgLyoqCiAgICAgICAgICogR2V0dGVyIGZv ciB0aGUgcW5hbWUgb2YgdGhlIGVsZW1lbnQgb3IgdGhlIHR5cGUgcmVmZXJyZWQgaW4gdGhl IGhlYWRlcgogICAgICAgICAqIEBwYXJhbSAgX015RXhjZXB0aW9uYWRiX015RXhjZXB0aW9u X3Qgb2JqZWN0CiAgICAgICAgICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50 IHN0cnVjdAogICAgICAgICAqIEByZXR1cm4gdGhlIHFuYW1lIG9mIHRoZSBlbGVtZW50IG9y IHRoZSB0eXBlCiAgICAgICAgICovCiAgICAgICAgCiAgICAgICAgYXh1dGlsX3FuYW1lX3Qq IEFYSVMyX0NBTEwKICAgICAgICBhZGJfTXlFeGNlcHRpb25fZ2V0X3FuYW1lICgKICAgICAg ICAgICAgYWRiX015RXhjZXB0aW9uX3QqIF9NeUV4Y2VwdGlvbiwKICAgICAgICAgICAgY29u c3QgYXh1dGlsX2Vudl90ICplbnYpOwogICAgICAgIAoKICAgICAgICAvKioKICAgICAgICAg KiBEZXNlcmlhbGl6ZSBhbiBYTUwgdG8gYWRiIG9iamVjdHMKICAgICAgICAgKiBAcGFyYW0g IF9NeUV4Y2VwdGlvbmFkYl9NeUV4Y2VwdGlvbl90IG9iamVjdAogICAgICAgICAqIEBwYXJh bSBlbnYgcG9pbnRlciB0byBlbnZpcm9ubWVudCBzdHJ1Y3QKICAgICAgICAgKiBAcGFyYW0g cGFyZW50IHRvIGRlc2VyaWFsaXplCiAgICAgICAgICogQHJldHVybiBBWElTMl9TVUNDRVNT IG9uIHN1Y2Nlc3MsIGVsc2UgQVhJUzJfRkFJTFVSRQogICAgICAgICAqLwogICAgICAgIGF4 aXMyX3N0YXR1c190IEFYSVMyX0NBTEwKICAgICAgICBhZGJfTXlFeGNlcHRpb25fZGVzZXJp YWxpemUoCiAgICAgICAgICAgIGFkYl9NeUV4Y2VwdGlvbl90KiBfTXlFeGNlcHRpb24sCiAg ICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52LCBheGlvbV9ub2RlX3QqIHBhcmVu dCk7CgogICAgICAgIC8qKgogICAgICAgICAqIFNlcmlhbGl6ZSB0byBhIFN0cmluZyBmcm9t IHRoZSBhZGIgb2JqZWN0cwogICAgICAgICAqIEBwYXJhbSAgX015RXhjZXB0aW9uYWRiX015 RXhjZXB0aW9uX3Qgb2JqZWN0CiAgICAgICAgICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVu dmlyb25tZW50IHN0cnVjdAogICAgICAgICAqIEByZXR1cm4gc2VyaWFsaXplZCBzdHJpbmcK ICAgICAgICAgKi8KICAgICAgICAKCiAgICAgICAgLyoqCiAgICAgICAgICogU2VyaWFsaXpl IHRvIGFuIFhNTCBmcm9tIHRoZSBhZGIgb2JqZWN0cwogICAgICAgICAqIEBwYXJhbSAgX015 RXhjZXB0aW9uYWRiX015RXhjZXB0aW9uX3Qgb2JqZWN0CiAgICAgICAgICogQHBhcmFtIGVu diBwb2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVjdAogICAgICAgICAqIEBwYXJhbSBNeUV4 Y2VwdGlvbl9vbV9ub2RlIG5vZGUgdG8gc2VyaWFsaXplIGZyb20KICAgICAgICAgKiBAcGFy YW0gaGFzX3BhcmVudCBpcyB0aGUgZWxlbWVudCBoYXMgYSBwYXJlbnQKICAgICAgICAgKiBA cGFyYW0gdGFnX2Nsb3NlZCB3aGV0aGVyIHRoZSBwYXJlbnQgdGFnIGlzIGNsb3NlZCBvciBu b3QKICAgICAgICAgKiBAcmV0dXJuIEFYSVMyX1NVQ0NFU1Mgb24gc3VjY2VzcywgZWxzZSBB WElTMl9GQUlMVVJFCiAgICAgICAgICovCiAgICAgICAgYXhpb21fbm9kZV90KiBBWElTMl9D QUxMCiAgICAgICAgYWRiX015RXhjZXB0aW9uX3NlcmlhbGl6ZSgKICAgICAgICAgICAgYWRi X015RXhjZXB0aW9uX3QqIF9NeUV4Y2VwdGlvbiwKICAgICAgICAgICAgY29uc3QgYXh1dGls X2Vudl90ICplbnYsCiAgICAgICAgICAgIGF4aW9tX25vZGVfdCogTXlFeGNlcHRpb25fb21f bm9kZSwgaW50IGhhc19wYXJlbnQsIGludCB0YWdfY2xvc2VkKTsKCgogICAgICAgIAogICAg ICAgIC8qKgogICAgICAgICAqIEdldHRlciBmb3IgdGV4dC4KICAgICAgICAgKiBAcGFyYW0g IF9NeUV4Y2VwdGlvbmFkYl9NeUV4Y2VwdGlvbl90IG9iamVjdAogICAgICAgICAqIEBwYXJh bSBlbnYgcG9pbnRlciB0byBlbnZpcm9ubWVudCBzdHJ1Y3QKICAgICAgICAgKiBAcmV0dXJu IGF4aXMyX2NoYXJfdCoKICAgICAgICAgKi8KICAgICAgICBheGlzMl9jaGFyX3QqIEFYSVMy X0NBTEwKICAgICAgICBhZGJfTXlFeGNlcHRpb25fZ2V0X3RleHQoCiAgICAgICAgICAgIGFk Yl9NeUV4Y2VwdGlvbl90KiBfTXlFeGNlcHRpb24sCiAgICAgICAgICAgIGNvbnN0IGF4dXRp bF9lbnZfdCAqZW52KTsKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0dGVyIGZvciB0ZXh0 LgogICAgICAgICAqIEBwYXJhbSAgX015RXhjZXB0aW9uYWRiX015RXhjZXB0aW9uX3Qgb2Jq ZWN0CiAgICAgICAgICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVj dAogICAgICAgICAqIEBwYXJhbSBwYXJhbV90ZXh0IGF4aXMyX2NoYXJfdCoKICAgICAgICAg KiBAcmV0dXJuIEFYSVMyX1NVQ0NFU1Mgb24gc3VjY2VzcywgZWxzZSBBWElTMl9GQUlMVVJF CiAgICAgICAgICovCiAgICAgICAgYXhpczJfc3RhdHVzX3QgQVhJUzJfQ0FMTAogICAgICAg IGFkYl9NeUV4Y2VwdGlvbl9zZXRfdGV4dCgKICAgICAgICAgICAgYWRiX015RXhjZXB0aW9u X3QqIF9NeUV4Y2VwdGlvbiwKICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYs CiAgICAgICAgICAgIGF4aXMyX2NoYXJfdCogIHBhcmFtX3RleHQpOwoKICAgICAgICAKCiAg ICAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgICAgfQogICAgICNlbmRpZgoKICAgICAjZW5kaWYg LyogQURCX01ZRVhDRVBUSU9OX0ggKi8KICAgIAoKAAAAAAAAAABleGNlcHRpb25UZXN0L3Ny Yy9heGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0U2VydmljZS5jAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAwMTE2MTEA MDAwMDAwMjAwMjEAMTA3MjAzMTI2MTIAMDI0MTQ3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABpcGV1c2VycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAoKICAgICAgICAvKioKICAgICAgICAgKiBheGlzMl9zdmNfc2tlbF9FeGNl cHRpb25UZXN0U2VydmljZS5jCiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIGZpbGUgd2Fz IGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETCBmb3IgIkV4Y2VwdGlvblRlc3RTZXJ2aWNlfGh0 dHA6Ly9hdWdlci5memsub3JnIiBzZXJ2aWNlCiAgICAgICAgICogYnkgdGhlIEFwYWNoZSBB eGlzMiB2ZXJzaW9uOiBTTkFQU0hPVCAgQnVpbHQgb24gOiBPY3QgMDIsIDIwMDcgKDA4OjIz OjIwIEdNVCswMDowMCkKICAgICAgICAgKiAgYXhpczJfc3ZjX3NrZWxfRXhjZXB0aW9uVGVz dFNlcnZpY2UKICAgICAgICAgKi8KCiAgICAgICAgI2luY2x1ZGUgImF4aXMyX3NrZWxfRXhj ZXB0aW9uVGVzdFNlcnZpY2UuaCIKICAgICAgICAjaW5jbHVkZSA8YXhpczJfc3ZjX3NrZWxl dG9uLmg+CiAgICAgICAgI2luY2x1ZGUgPGF4dXRpbF9hcnJheV9saXN0Lmg+CiAgICAgICAg I2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAgICAgI2luY2x1ZGUgImFkYl9NeUV4Y2VwdGlvbi5o IgoKICAgICAgICAvKioKICAgICAgICAgKiBmdW5jdGlvbnMgcHJvdG90eXBlcwogICAgICAg ICAqLwoKICAgICAgICAvKiBPbiBmYXVsdCwgaGFuZGxlIHRoZSBmYXVsdCAqLwogICAgICAg IGF4aW9tX25vZGVfdCogQVhJUzJfQ0FMTAogICAgICAgIGF4aXMyX3N2Y19za2VsX0V4Y2Vw dGlvblRlc3RTZXJ2aWNlX29uX2ZhdWx0KGF4aXMyX3N2Y19za2VsZXRvbl90ICpzdmNfc2tl bGV0b24sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52LCBheGlv bV9ub2RlX3QgKm5vZGUpOwoKICAgICAgICAvKiBGcmVlIHRoZSBzZXJ2aWNlICovCiAgICAg ICAgaW50IEFYSVMyX0NBTEwKICAgICAgICBheGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0 U2VydmljZV9mcmVlKGF4aXMyX3N2Y19za2VsZXRvbl90ICpzdmNfc2tlbGV0b24sCiAgICAg ICAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52KTsKCiAgICAgICAgLyogVGhp cyBtZXRob2QgaW52b2tlcyB0aGUgcmlnaHQgc2VydmljZSBtZXRob2QgKi8KICAgICAgICBh eGlvbV9ub2RlX3QqIEFYSVMyX0NBTEwKICAgICAgICBheGlzMl9zdmNfc2tlbF9FeGNlcHRp b25UZXN0U2VydmljZV9pbnZva2UoYXhpczJfc3ZjX3NrZWxldG9uX3QgKnN2Y19za2VsZXRv biwKICAgICAgICAgICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudiwKICAgICAg ICAgICAgICAgICAgICBheGlvbV9ub2RlX3QgKm5vZGUsCiAgICAgICAgICAgICAgICAgICAg YXhpczJfbXNnX2N0eF90ICptc2dfY3R4KTsKCiAgICAgICAgLyogSW5pdGlhbGl6aW5nIHRo ZSBlbnZpcm9ubWVudCAgKi8KICAgICAgICBpbnQgQVhJUzJfQ0FMTAogICAgICAgIGF4aXMy X3N2Y19za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNlX2luaXQoYXhpczJfc3ZjX3NrZWxldG9u X3QgKnN2Y19za2VsZXRvbiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXh1dGls X2Vudl90ICplbnYpOwoKICAgICAgICAvKiBDcmVhdGUgdGhlIHNlcnZpY2UgICovCiAgICAg ICAgYXhpczJfc3ZjX3NrZWxldG9uX3QqIEFYSVMyX0NBTEwKICAgICAgICBheGlzMl9zdmNf c2tlbF9FeGNlcHRpb25UZXN0U2VydmljZV9jcmVhdGUoY29uc3QgYXh1dGlsX2Vudl90ICpl bnYpOwoKICAgICAgICBzdGF0aWMgY29uc3QgYXhpczJfc3ZjX3NrZWxldG9uX29wc190IGF4 aXMyX3N2Y19za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNlX3N2Y19za2VsZXRvbl9vcHNfdmFy ID0gewogICAgICAgICAgICBheGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0U2VydmljZV9p bml0LAogICAgICAgICAgICBheGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0U2VydmljZV9p bnZva2UsCiAgICAgICAgICAgIGF4aXMyX3N2Y19za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNl X29uX2ZhdWx0LAogICAgICAgICAgICBheGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0U2Vy dmljZV9mcmVlCiAgICAgICAgfTsKCgogICAgICAgIC8qKgogICAgICAgICAqIEltcGxlbWVu dGF0aW9ucyBmb3IgdGhlIGZ1bmN0aW9ucwogICAgICAgICAqLwoKCWF4aXMyX3N2Y19za2Vs ZXRvbl90KiBBWElTMl9DQUxMCglheGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0U2Vydmlj ZV9jcmVhdGUoY29uc3QgYXh1dGlsX2Vudl90ICplbnYpCgl7CgkgICAgYXhpczJfc3ZjX3Nr ZWxldG9uX3QgKnN2Y19za2VsZXRvbiA9IE5VTEw7CiAgICAgICAgLyogQWxsb2NhdGUgbWVt b3J5IGZvciB0aGUgc3RydWN0cyAqLwogICAgICAgIHN2Y19za2VsZXRvbiA9IChheGlzMl9z dmNfc2tlbGV0b25fdCAqKUFYSVMyX01BTExPQyhlbnYtPmFsbG9jYXRvciwKICAgICAgICAg ICAgc2l6ZW9mKGF4aXMyX3N2Y19za2VsZXRvbl90KSk7CgogICAgICAgIHN2Y19za2VsZXRv bi0+b3BzID0gJmF4aXMyX3N2Y19za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNlX3N2Y19za2Vs ZXRvbl9vcHNfdmFyOwoKCSAgICBzdmNfc2tlbGV0b24tPmZ1bmNfYXJyYXkgPSBOVUxMOwoK CSAgICByZXR1cm4gc3ZjX3NrZWxldG9uOwoJfQoKCglpbnQgQVhJUzJfQ0FMTAoJYXhpczJf c3ZjX3NrZWxfRXhjZXB0aW9uVGVzdFNlcnZpY2VfaW5pdChheGlzMl9zdmNfc2tlbGV0b25f dCAqc3ZjX3NrZWxldG9uLAoJICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXh1dGls X2Vudl90ICplbnYpCgl7CgkgICAgc3ZjX3NrZWxldG9uLT5mdW5jX2FycmF5ID0gYXh1dGls X2FycmF5X2xpc3RfY3JlYXRlKGVudiwgMTApOwogICAgICAgIAoJICAgICAgYXh1dGlsX2Fy cmF5X2xpc3RfYWRkKHN2Y19za2VsZXRvbi0+ZnVuY19hcnJheSwgZW52LCBheHV0aWxfc3Ry ZHVwKGVudiwgInZlcnNpb24iKSk7CiAgICAgICAgCgoJICAgIC8qIEFueSBpbml0aWFsaXph dGlvbiBzdHVmZiBvZiBheGlzMl9za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNlIGdvZXMgaGVy ZSAqLwoJICAgIHJldHVybiBBWElTMl9TVUNDRVNTOwoJfQoKCWludCBBWElTMl9DQUxMCglh eGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0U2VydmljZV9mcmVlKGF4aXMyX3N2Y19za2Vs ZXRvbl90ICpzdmNfc2tlbGV0b24sCgkJCQkgY29uc3QgYXh1dGlsX2Vudl90ICplbnYpCgl7 CiAgICAgICAgLyogRnJlZSB0aGUgZnVuY3Rpb24gYXJyYXkgKi8KICAgICAgICBpZiAoc3Zj X3NrZWxldG9uLT5mdW5jX2FycmF5KQogICAgICAgIHsKICAgICAgICAgICAgYXh1dGlsX2Fy cmF5X2xpc3RfZnJlZShzdmNfc2tlbGV0b24tPmZ1bmNfYXJyYXksIGVudik7CiAgICAgICAg ICAgIHN2Y19za2VsZXRvbi0+ZnVuY19hcnJheSA9IE5VTEw7CiAgICAgICAgfQoKICAgICAg ICAvKiBGcmVlIHRoZSBzZXJ2aWNlIHNrZWxldG9uICovCiAgICAgICAgaWYgKHN2Y19za2Vs ZXRvbikKICAgICAgICB7CiAgICAgICAgICAgIEFYSVMyX0ZSRUUoZW52LT5hbGxvY2F0b3Is IHN2Y19za2VsZXRvbik7CiAgICAgICAgICAgIHN2Y19za2VsZXRvbiA9IE5VTEw7CiAgICAg ICAgfQoKICAgICAgICByZXR1cm4gQVhJUzJfU1VDQ0VTUzsKCX0KCgoJLyoKCSAqIFRoaXMg bWV0aG9kIGludm9rZXMgdGhlIHJpZ2h0IHNlcnZpY2UgbWV0aG9kCgkgKi8KCWF4aW9tX25v ZGVfdCogQVhJUzJfQ0FMTAoJYXhpczJfc3ZjX3NrZWxfRXhjZXB0aW9uVGVzdFNlcnZpY2Vf aW52b2tlKGF4aXMyX3N2Y19za2VsZXRvbl90ICpzdmNfc2tlbGV0b24sCgkJCQljb25zdCBh eHV0aWxfZW52X3QgKmVudiwKCQkJCWF4aW9tX25vZGVfdCAqY29udGVudF9ub2RlLAoJCQkJ YXhpczJfbXNnX2N0eF90ICptc2dfY3R4KQoJewogICAgICAgICAvKiBkZXBlbmRpbmcgb24g dGhlIGZ1bmN0aW9uIG5hbWUgaW52b2tlIHRoZQogICAgICAgICAgKiBjb3JyZXNwb25kaW5n ICBtZXRob2QKICAgICAgICAgICovCgogICAgICAgICAgYXhpczJfb3BfY3R4X3QgKm9wZXJh dGlvbl9jdHggPSBOVUxMOwogICAgICAgICAgYXhpczJfb3BfdCAqb3BlcmF0aW9uID0gTlVM TDsKICAgICAgICAgIGF4dXRpbF9xbmFtZV90ICpvcF9xbmFtZSA9IE5VTEw7CiAgICAgICAg ICBheGlzMl9jaGFyX3QgKm9wX25hbWUgPSBOVUxMOwoKICAgICAgICAgIGF4aW9tX25vZGVf dCAqcmV0X25vZGUgPSBOVUxMOwoKICAgICAgICAgIAogICAgICAgICAgICBhZGJfdmVyc2lv blJlc3BvbnNlX3QqIHJldF92YWwxID0gTlVMTDsKICAgICAgICAgICAgYWRiX3ZlcnNpb25f dCogaW5wdXRfdmFsMV8xOwogICAgICAgICAgICAKCiAgICAgICAgICBvcGVyYXRpb25fY3R4 ID0gYXhpczJfbXNnX2N0eF9nZXRfb3BfY3R4KG1zZ19jdHgsIGVudik7CiAgICAgICAgICBv cGVyYXRpb24gPSBheGlzMl9vcF9jdHhfZ2V0X29wKG9wZXJhdGlvbl9jdHgsIGVudik7CiAg ICAgICAgICBvcF9xbmFtZSA9IChheHV0aWxfcW5hbWVfdCAqKWF4aXMyX29wX2dldF9xbmFt ZShvcGVyYXRpb24sIGVudik7CiAgICAgICAgICBvcF9uYW1lID0gYXh1dGlsX3FuYW1lX2dl dF9sb2NhbHBhcnQob3BfcW5hbWUsIGVudik7CgogICAgICAgICAgaWYgKG9wX25hbWUpCiAg ICAgICAgICB7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIGlmICggYXh1dGlsX3N0 cmNtcChvcF9uYW1lLCAidmVyc2lvbiIpID09IDAgKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGlucHV0X3ZhbDFfMSA9IAog ICAgICAgICAgICAgICAgICAgICAgICBhZGJfdmVyc2lvbl9jcmVhdGUoIGVudik7CiAgICAg ICAgICAgICAgICAgICAgICAgIGFkYl92ZXJzaW9uX2Rlc2VyaWFsaXplKGlucHV0X3ZhbDFf MSwgZW52LCBjb250ZW50X25vZGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgcmV0X3ZhbDEgPSAgYXhpczJfc2tlbF9FeGNlcHRpb25UZXN0U2Vy dmljZV92ZXJzaW9uKGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfdmFsMV8xICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCBO VUxMID09IHJldF92YWwxICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgIEFYSVMyX0xPR19FUlJPUiggZW52LT5sb2csIEFYSVMyX0xPR19TSSwgIk5V TEwgcmV0dXJudGVkIGZyb20gdGhlIGJ1c2luZXNzIGxvZ2ljIGZyb20gdmVyc2lvbiAiCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICVkIDo6ICVzIiwgZW52 LT5lcnJvci0+ZXJyb3JfbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVhJUzJfRVJST1JfR0VUX01FU1NBR0UoZW52LT5lcnJvcikpOwogICAgICAg ICAgICAgICAgICAgICAgICAvL3JldHVybiBheGlzMl9zdmNfc2tlbF9FeGNlcHRpb25UZXN0 U2VydmljZV9vbl9mYXVsdCggc3ZjX3NrZWxldG9uLCBlbnYsIE5VTEwpOwogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICAgICAgcmV0X25vZGUgPSAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFkYl92ZXJzaW9uUmVzcG9uc2Vfc2VyaWFsaXplKHJldF92YWwxLCBlbnYsIE5VTEws IEFYSVMyX0ZBTFNFLCBBWElTMl9UUlVFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFkYl92ZXJzaW9uUmVzcG9uc2VfZnJlZShyZXRfdmFsMSwgZW52KTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFkYl92ZXJzaW9uX2ZyZWUoaW5wdXRfdmFsMV8xLCBl bnYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgIHJldHVybiByZXRfbm9kZTsKICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICBwcmludGYoImF4aXMyX3N2 Y19za2VsX0V4Y2VwdGlvblRlc3RTZXJ2aWNlIHNlcnZpY2UgRVJST1I6IGludmFsaWQgT00g cGFyYW1ldGVycyBpbiByZXF1ZXN0XG4iKTsKICAgICAgICAgIHJldHVybiBjb250ZW50X25v ZGU7CiAgICB9CgogICAgYXhpb21fbm9kZV90KiBBWElTMl9DQUxMCiAgICBheGlzMl9zdmNf c2tlbF9NeVNlcnZpY2Vfb25fZmF1bHQoYXhpczJfc3ZjX3NrZWxldG9uX3QgKnN2Y19za2Vs ZXRvbiwKICAgICAgICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYsIGF4aW9t X25vZGVfdCAqbm9kZSkKCXsKICAgICAgICBheGlvbV9ub2RlX3QgKmVycm9yX25vZGUgPSBO VUxMOwogICAgICAgIGF4aW9tX2VsZW1lbnRfdCAqZXJyb3JfZWxlID0gTlVMTDsKCiAgICAg ICAgYXhpb21fbm9kZV90ICphbm90aGVyX25vZGUgPSBOVUxMOwogICAgICAgIGFkYl9NeUV4 Y2VwdGlvbl90KiBfTXlFeGNlcHRpb24gPSBOVUxMOwoKICAgICAgICBheHV0aWxfZXJyb3Jf Y29kZXNfdCBlcnJvcl9jb2RlOwoKICAgICAgICBlcnJvcl9jb2RlID0gZW52LT5lcnJvci0+ ZXJyb3JfbnVtYmVyOwoKICAgICAgICBwcmludGYoImVycm9yX2NvZGU6ICVkLCAlZFxuIiwg ZXJyb3JfY29kZSxNWV9FWENFUFRJT04pOwoKICAgICAgICBpZihlcnJvcl9jb2RlID09IE1Z X0VYQ0VQVElPTikKICAgICAgICB7CiAgICAgICAgICAgIC8vIGdldCB0aGUgdXNlciBkZWZp bmVkIGZhdWx0IG1lc3NhZ2UKICAgICAgICAgICAgX015RXhjZXB0aW9uID0gYWRiX015RXhj ZXB0aW9uX2NyZWF0ZShlbnYpOwogICAgICAgICAgICBhZGJfTXlFeGNlcHRpb25fc2V0X3Rl eHQoX015RXhjZXB0aW9uLGVudiwiSXQgaXMgbXkgRXhjZXB0aW9uIik7CiAgICAKICAgIAog ICAgICAgICAgICBhbm90aGVyX25vZGUgPSBhZGJfTXlFeGNlcHRpb25fc2VyaWFsaXplKF9N eUV4Y2VwdGlvbiwgZW52LCBOVUxMLCBBWElTMl9GQUxTRSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBWElTMl9UUlVFKTsKICAgICAgICB9CiAgICAg ICAgcmV0dXJuIGFub3RoZXJfbm9kZTsKCX0KCiAgICAvL29sZCB2ZXJzaW9uCiAgICAvKmF4 aW9tX25vZGVfdCogQVhJUzJfQ0FMTAogICAgYXhpczJfc3ZjX3NrZWxfRXhjZXB0aW9uVGVz dFNlcnZpY2Vfb25fZmF1bHQoYXhpczJfc3ZjX3NrZWxldG9uX3QgKnN2Y19za2VsZXRvbiwK ICAgICAgICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYsIGF4aW9tX25vZGVf dCAqbm9kZSkKCXsKCQlheGlvbV9ub2RlX3QgKmVycm9yX25vZGUgPSBOVUxMOwoJCWF4aW9t X2VsZW1lbnRfdCAqZXJyb3JfZWxlID0gTlVMTDsKCQllcnJvcl9lbGUgPSBheGlvbV9lbGVt ZW50X2NyZWF0ZShlbnYsIG5vZGUsICJmYXVsdCIsIE5VTEwsCiAgICAJCQkJCSZlcnJvcl9u b2RlKTsKCQlheGlvbV9lbGVtZW50X3NldF90ZXh0KGVycm9yX2VsZSwgZW52LCAiRXhjZXB0 aW9uVGVzdFNlcnZpY2V8aHR0cDovL2F1Z2VyLmZ6ay5vcmcgZmFpbGVkIiwKICAgIAkJCQkJ ZXJyb3Jfbm9kZSk7CgkJcmV0dXJuIGVycm9yX25vZGU7Cgl9Ki8KCgoJLyoqCgkgKiBGb2xs b3dpbmcgYmxvY2sgZGlzdGluZ3Vpc2ggdGhlIGV4cG9zZWQgcGFydCBvZiB0aGUgZGxsLgog CSAqLwoKICAgIEFYSVMyX0VYVEVSTiBpbnQKICAgIGF4aXMyX2dldF9pbnN0YW5jZShzdHJ1 Y3QgYXhpczJfc3ZjX3NrZWxldG9uICoqaW5zdCwKCSAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52KQoJewoJCSppbnN0ID0gYXhpczJfc3ZjX3NrZWxf RXhjZXB0aW9uVGVzdFNlcnZpY2VfY3JlYXRlKGVudik7CgogICAgICAgIGlmKCEoKmluc3Qp KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIEFYSVMyX0ZBSUxVUkU7CiAgICAgICAg fQoKICAJCXJldHVybiBBWElTMl9TVUNDRVNTOwoJfQoKCUFYSVMyX0VYVEVSTiBpbnQgCiAg ICBheGlzMl9yZW1vdmVfaW5zdGFuY2UoYXhpczJfc3ZjX3NrZWxldG9uX3QgKmluc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudikKCXsK ICAgICAgICBheGlzMl9zdGF0dXNfdCBzdGF0dXMgPSBBWElTMl9GQUlMVVJFOwogICAgICAg CWlmIChpbnN0KQogICAgICAgIHsKICAgICAgICAgICAgc3RhdHVzID0gQVhJUzJfU1ZDX1NL RUxFVE9OX0ZSRUUoaW5zdCwgZW52KTsKICAgICAgICB9CiAgICAJcmV0dXJuIHN0YXR1czsK CX0KCgogICAgCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABleGNlcHRpb25UZXN0L3NyYy9NeVNlcnZpY2VfZXJyb3Jz LmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAwMTE2MTEAMDAwMDAwMDIxMzQAMTA3MjAz MTE2MzcAMDIwMzQ2ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpcGV1c2Vy cwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNpbmNsdWRl ICJNeVNlcnZpY2VfZXJyb3JzLmgiCgpBWElTMl9JTVBPUlQgZXh0ZXJuIGNvbnN0IGF4aXMy X2NoYXJfdCogYXh1dGlsX2Vycm9yX21lc3NhZ2VzW107CgpheGlzMl9zdGF0dXNfdCBBWElT Ml9DQUxMCm15c2VydmljZXNfZXJyb3JfaW5pdCgpCnsKICAgIGF4dXRpbF9lcnJvcl9tZXNz YWdlc1tNWV9FWENFUFRJT05dID0KICAgICAgICAiTXlFeGNlcHRpb24iOwogICAgICAgICAg ICAKfQoKCi8qKiBjb3B5IGFuZCBlZGl0ZWQgZnJvbSBheHV0aWxfZXJyb3JfZ2V0X21lc3Nh Z2UKICAgSSB0aGluayB3ZSBzaG91bGQgZWRpdCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbm90 IHRvIGNoZWNrIHRoZSBib3VuZGlyZXMKICAgc28gd2UgY2FuICB1c2UgdGhlIHNhbWUgZnVu Y3Rpb24uLgogKi8KQVhJUzJfRVhURVJOIGNvbnN0IGF4aXMyX2NoYXJfdCAqIEFYSVMyX0NB TEwKbXlzZXJ2aWNlc19lcnJvcl9nZXRfbWVzc2FnZShjb25zdCBheHV0aWxfZXJyb3JfdCAq ZXJyb3IpCnsKewogICAgY29uc3QgYXhpczJfY2hhcl90ICptZXNzYWdlID0gTlVMTDsKICAg IGlmIChlcnJvcikKICAgIHsKICAgICAgICBpZiAoZXJyb3ItPmVycm9yX251bWJlciA+IE1Z X1NFUlZJQ0VTX05PTkUgJiYgZXJyb3ItPmVycm9yX251bWJlciA8IE1ZX1NFUlZJQ0VTX0xB U1QpCiAgICAgICAgICAgIG1lc3NhZ2UgPSBheHV0aWxfZXJyb3JfbWVzc2FnZXNbZXJyb3It PmVycm9yX251bWJlcl07CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYg KGVycm9yLT5tZXNzYWdlKQogICAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLT5tZXNz YWdlOwogICAgICAgICAgICBlbHNlIGlmIChlcnJvci0+ZXJyb3JfbnVtYmVyID09IEFYSVMy X0VSUk9SX05PTkUpCiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYXh1dGlsX2Vycm9yX21l c3NhZ2VzW0FYSVMyX0VSUk9SX05PTkVdOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICBtZXNzYWdlID0gIlVuZGVmaW5lZCBlcnJvciBpbiBteSBzZXJ2aWNlcyBpcyByZXR1 cm5lZCBieSBidXNpbmVzcyBsb2dpYyBpbXBsZW1lbnRhdGlvbiI7CiAgICAgICAgfQogICAg fQoKICAgIHJldHVybiBtZXNzYWdlOwp9Cgp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAGV4Y2VwdGlvblRlc3Qvc3JjL015U2VydmljZV9lcnJvcnMuaAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAwMDAwNjQ0ADAwMTIwNTQAMDAxMTYxMQAwMDAwMDAwMDc1NQAxMDcyMDMxMDQx MQAwMjAzNDcAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAdXN0YXIgIABzdXR0ZXItbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlwZXVzZXJzAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2luY2x1ZGUgPGF4 dXRpbF9lcnJvci5oPgoKLyoqIHdlIGhhdmUgdG8gcmVzZXJ2ZSBzb21lIGVycm9yIGNvZGVz IGZvciBhZGIgYW5kIGZvciBjdXN0b20gbWVzc2FnZXMgKi8KI2RlZmluZSBNWVNFUlZJQ0Vf RVJST1JfQ09ERVNfU1RBUlQgKEFYSVMyX0VSUk9SX0xBU1QgKyAyMDAwKQoKdHlwZWRlZiBl bnVtIE15U2VydmljZV9lcnJvcl9jb2Rlcwp7CiAgICBNWV9TRVJWSUNFU19OT05FID0gTVlT RVJWSUNFX0VSUk9SX0NPREVTX1NUQVJULAoKICAgIE1ZX0VYQ0VQVElPTiwKCiAgICBNWV9T RVJWSUNFU19MQVNUCgp9IE15U2VydmljZV9lcnJvcl9jb2Rlc190OwoKQVhJUzJfRVhURVJO IGF4aXMyX3N0YXR1c190IEFYSVMyX0NBTEwKbXlzZXJ2aWNlc19lcnJvcl9pbml0KCk7CgpB WElTMl9FWFRFUk4gY29uc3QgYXhpczJfY2hhcl90ICogQVhJUzJfQ0FMTApteXNlcnZpY2Vz X2Vycm9yX2dldF9tZXNzYWdlKGNvbnN0IGF4dXRpbF9lcnJvcl90ICplcnJvcik7CgAAAAAA AAAAAAAAAAAAAAAAAABleGNlcHRpb25UZXN0L3NyYy9hZGJfdmVyc2lvblJlc3BvbnNlLmMA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAwMTE2MTEAMDAwMDAwMjY2NDUAMTA3MjAzMDE2MTEA MDIxMDYyACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHVzdGFyICAAc3V0dGVyLW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpcGV1c2VycwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogICAgICAgLyoqCiAg ICAgICAgKiBhZGJfdmVyc2lvblJlc3BvbnNlLmgKICAgICAgICAqCiAgICAgICAgKiBUaGlz IGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAogICAgICAgICogYnkgdGhlIEFw YWNoZSBBeGlzMi9DIHZlcnNpb246IFNOQVBTSE9UICBCdWlsdCBvbiA6IE9jdCAwMiwgMjAw NyAoMDg6MjM6MzkgR01UKzAwOjAwKQogICAgICAgICoKICAgICAgICAqLwoKICAgICAgICAj aW5jbHVkZSAiYWRiX3ZlcnNpb25SZXNwb25zZS5oIgogICAgICAgICAgCiAgICAgICAgICAg ICAgLyoqCiAgICAgICAgICAgICAgICogaW1wbG1lbnRhdGlvbiBvZiB0aGUgdmVyc2lvblJl c3BvbnNlfGh0dHA6Ly9hdWdlci5memsub3JnIGVsZW1lbnQKICAgICAgICAgICAgICAgKi8K ICAgICAgICAgICAgIAoKCiAgICAgICAgc3RydWN0IGFkYl92ZXJzaW9uUmVzcG9uc2UKICAg ICAgICB7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYXh1dGlsX3FuYW1lX3QqIHFu YW1lOwogICAgICAgICAgICBheGlzMl9jaGFyX3QqIGF0dHJpYl9yZXR1cm47CiAgICAgICAg ICAgIAogICAgICAgIH07CgoKICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqIEZ1 bmN0aW9uIEltcGxtZW50YXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwogICAgICAgIEFYSVMyX0VYVEVSTiBhZGJfdmVyc2lvblJlc3BvbnNlX3QqIEFYSVMyX0NB TEwKICAgICAgICBhZGJfdmVyc2lvblJlc3BvbnNlX2NyZWF0ZSgKICAgICAgICAgICAgY29u c3QgYXh1dGlsX2Vudl90ICplbnYgKQogICAgICAgIHsKICAgICAgICAgICAgYWRiX3ZlcnNp b25SZXNwb25zZV90ICpfdmVyc2lvblJlc3BvbnNlID0gTlVMTDsKICAgICAgICAgICAgCiAg ICAgICAgICAgICAgYXh1dGlsX3FuYW1lX3QqIHFuYW1lID0gTlVMTDsKICAgICAgICAgICAg CiAgICAgICAgICAgIEFYSVMyX0VOVl9DSEVDSyhlbnYsIE5VTEwpOwoKICAgICAgICAgICAg X3ZlcnNpb25SZXNwb25zZSA9IChhZGJfdmVyc2lvblJlc3BvbnNlX3QgKikgQVhJUzJfTUFM TE9DKGVudi0+CiAgICAgICAgICAgICAgICBhbGxvY2F0b3IsIHNpemVvZihhZGJfdmVyc2lv blJlc3BvbnNlX3QpKTsKCiAgICAgICAgICAgIGlmKE5VTEwgPT0gX3ZlcnNpb25SZXNwb25z ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQVhJUzJfRVJST1JfU0VUKGVudi0+ ZXJyb3IsIEFYSVMyX0VSUk9SX05PX01FTU9SWSwgQVhJUzJfRkFJTFVSRSk7CiAgICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbWVtc2V0 KF92ZXJzaW9uUmVzcG9uc2UsIDAsIHNpemVvZihhZGJfdmVyc2lvblJlc3BvbnNlX3QpKTsK CiAgICAgICAgICAgIAogICAgICAgICAgICAgIHFuYW1lID0gIGF4dXRpbF9xbmFtZV9jcmVh dGUgKGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb25SZXNwb25zZSIsCiAg ICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vYXVnZXIuZnprLm9yZyIsCiAgICAgICAg ICAgICAgICAgICAgICAgICJuczEiKTsKCiAgICAgICAgICAgICAgX3ZlcnNpb25SZXNwb25z ZS0+cW5hbWUgPSBxbmFtZTsKICAgICAgICAgICAgCgogICAgICAgICAgICByZXR1cm4gX3Zl cnNpb25SZXNwb25zZTsKICAgICAgICB9CgogICAgICAgIGF4aXMyX3N0YXR1c190IEFYSVMy X0NBTEwKICAgICAgICBhZGJfdmVyc2lvblJlc3BvbnNlX2ZyZWUgKAogICAgICAgICAgICAg ICAgYWRiX3ZlcnNpb25SZXNwb25zZV90KiBfdmVyc2lvblJlc3BvbnNlLAogICAgICAgICAg ICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYpCiAgICAgICAgewogICAgICAgICAgICAK ICAgICAgICAgICAgCgogICAgICAgICAgICBBWElTMl9FTlZfQ0hFQ0soZW52LCBBWElTMl9G QUlMVVJFKTsKCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICBpZiggX3ZlcnNpb25SZXNwb25zZS0+YXR0cmliX3JldHVybiAh PSBOVUxMKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAgICAgIEFYSVMyX0ZSRUUoIGVudi0+IGFsbG9jYXRv ciwgX3ZlcnNpb25SZXNwb25zZS0+YXR0cmliX3JldHVybik7CiAgICAgICAgICAgICAgICAg ICBfdmVyc2lvblJlc3BvbnNlLT5hdHRyaWJfcmV0dXJuID0gTlVMTDsKICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgIAogICAgICAgICAgICAgIAogICAgICAgICAgICAgIAogICAg ICAgICAgICAgIGlmKF92ZXJzaW9uUmVzcG9uc2UtPnFuYW1lICkKICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIGF4dXRpbF9xbmFtZV9mcmVlIChfdmVyc2lvblJlc3BvbnNl LT5xbmFtZSwgZW52KTsKICAgICAgICAgICAgICAgICAgX3ZlcnNpb25SZXNwb25zZS0+cW5h bWUgPSBOVUxMOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgCgogICAgICAgICAgICBp ZihfdmVyc2lvblJlc3BvbnNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBBWElT Ml9GUkVFKCBlbnYtPmFsbG9jYXRvciwgX3ZlcnNpb25SZXNwb25zZSk7CiAgICAgICAgICAg ICAgICBfdmVyc2lvblJlc3BvbnNlID0gTlVMTDsKICAgICAgICAgICAgfQogICAgICAgICAg ICByZXR1cm4gQVhJUzJfU1VDQ0VTUzsKICAgICAgICB9CgogICAgICAgICAgCiAgICAgICAg ICAgYXh1dGlsX3FuYW1lX3QqIEFYSVMyX0NBTEwKICAgICAgICAgICBhZGJfdmVyc2lvblJl c3BvbnNlX2dldF9xbmFtZSAoCiAgICAgICAgICAgICAgICAgICBhZGJfdmVyc2lvblJlc3Bv bnNlX3QqIF92ZXJzaW9uUmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICBjb25zdCBheHV0 aWxfZW52X3QgKmVudikKICAgICAgICAgICB7CiAgICAgICAgICAgICAgIEFYSVMyX0VOVl9D SEVDSyhlbnYsIEFYSVMyX0ZBSUxVUkUpOwoKICAgICAgICAgICAgICAgcmV0dXJuIF92ZXJz aW9uUmVzcG9uc2UtPiBxbmFtZTsKICAgICAgICAgICB9CiAgICAgICAgCgogICAgICAgIGF4 aXMyX3N0YXR1c190IEFYSVMyX0NBTEwKICAgICAgICBhZGJfdmVyc2lvblJlc3BvbnNlX2Rl c2VyaWFsaXplKAogICAgICAgICAgICAgICAgYWRiX3ZlcnNpb25SZXNwb25zZV90KiBfdmVy c2lvblJlc3BvbnNlLAogICAgICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYs CiAgICAgICAgICAgICAgICBheGlvbV9ub2RlX3QqIHBhcmVudCkKICAgICAgICB7CiAgICAg ICAgICBheGlzMl9zdGF0dXNfdCBzdGF0dXMgPSBBWElTMl9TVUNDRVNTOwogICAgICAgICAg IAogICAgICAgICAgICAgYXhpczJfY2hhcl90KiB0ZXh0X3ZhbHVlID0gTlVMTDsKICAgICAg ICAgICAgIGF4dXRpbF9xbmFtZV90ICpxbmFtZSA9IE5VTEw7CiAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgIGF4aW9tX25hbWVzcGFjZV90ICpuczEgPSBOVUxMOwogICAgICAgICAg ICAgIAogICAgICAgICAgICAgICBheGlvbV9ub2RlX3QgKmZpcnN0X25vZGUgPSBOVUxMOwog ICAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgICBheGlvbV9ub2Rl X3QgKmN1cnJlbnRfbm9kZSA9IE5VTEw7CiAgICAgICAgICAgICAgIGF4aW9tX2VsZW1lbnRf dCAqY3VycmVudF9lbGVtZW50ID0gTlVMTDsKICAgICAgICAgICAgCiAgICAgICAgICAgIEFY SVMyX0VOVl9DSEVDSyhlbnYsIEFYSVMyX0ZBSUxVUkUpOwoKICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgbnMxID0gYXhpb21fbmFtZXNwYWNlX2NyZWF0ZSAoZW52LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vYXVnZXIuZnprLm9y ZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5zMSIpOwog ICAgICAgICAgICAgIAogICAgICAgICAgICAgIGlmICggTlVMTCA9PSBwYXJlbnQgKQogICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8qKiBUaGlzIHNob3VsZCBiZSBjaGVja2Vk IGFib3ZlICovCiAgICAgICAgICAgICAgICBBWElTMl9MT0dfRVJST1IoZW52LT5sb2csIEFY SVMyX0xPR19TSSwgIk5VTEwgZWxlbWVuZXQgZm9yIHZlcnNpb25SZXNwb25zZSIKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgJWQgOjogJXMiLCBl bnYtPmVycm9yLT5lcnJvcl9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBWElTMl9FUlJPUl9HRVRfTUVTU0FHRShlbnYtPmVycm9yKSk7 CiAgICAgICAgICAgICAgICByZXR1cm4gQVhJUzJfRkFJTFVSRTsKICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZWxlbWVudCA9IChh eGlvbV9lbGVtZW50X3QgKilheGlvbV9ub2RlX2dldF9kYXRhX2VsZW1lbnQoIHBhcmVudCwg ZW52KTsKICAgICAgICAgICAgICAgICAgICBxbmFtZSA9IGF4aW9tX2VsZW1lbnRfZ2V0X3Fu YW1lKCBjdXJyZW50X2VsZW1lbnQsIGVudiwgcGFyZW50KTsKICAgICAgICAgICAgICAgICAg ICBpZiAoIGF4dXRpbF9xbmFtZV9lcXVhbHMoIHFuYW1lLCBlbnYsIF92ZXJzaW9uUmVzcG9u c2UtPiBxbmFtZSApICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X25vZGUgPSBheGlvbV9u b2RlX2dldF9maXJzdF9jaGlsZCggcGFyZW50LCBlbnYpOwogICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBBWElTMl9M T0dfRVJST1IoZW52LT5sb2csIEFYSVMyX0xPR19TSSwgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJGYWlsZWQgaW4gYnVpbGRpbmcgYWRiIG9iamVjdCBmb3IgdmVyc2lvblJl c3BvbnNlIDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JvbmcgWE1MIHRv IGRlc2VyaWFsaXplIik7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gQVhJUzJfRkFJTFVSRTsKICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAqIGJ1aWxkaW5nIHJldHVy biBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbm9kZSA9IGZpcnN0X25vZGU7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfbm9kZSAg JiYgYXhpb21fbm9kZV9nZXRfZGF0YV9lbGVtZW50KCBjdXJyZW50X25vZGUsIGVudikgJiYg IWF4dXRpbF9zdHJjbXAoInJldHVybiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBh eGlvbV9lbGVtZW50X2dldF9sb2NhbG5hbWUoKGF4aW9tX2VsZW1lbnRfdCAqKWF4aW9tX25v ZGVfZ2V0X2RhdGFfZWxlbWVudCggY3VycmVudF9ub2RlLCBlbnYpLCBlbnYpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9lbGVtZW50ID0gKGF4aW9tX2Vs ZW1lbnRfdCAqKWF4aW9tX25vZGVfZ2V0X2RhdGFfZWxlbWVudCggY3VycmVudF9ub2RlLCBl bnYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfdmFsdWUg PSBheGlvbV9lbGVtZW50X2dldF90ZXh0KGN1cnJlbnRfZWxlbWVudCwgZW52LCBjdXJyZW50 X25vZGUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMg PSBhZGJfdmVyc2lvblJlc3BvbnNlX3NldF9yZXR1cm4oIF92ZXJzaW9uUmVzcG9uc2UsIGVu diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRleHRfdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIEFYSVMy X0ZBSUxVUkUgPT0gIHN0YXR1cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVhJUzJfTE9HX0VSUk9S KGVudi0+bG9nLCBBWElTMl9MT0dfU0ksICJmYWlsZWQgaW4gc2V0dGluZyB0aGUgdmFsdWUg Zm9yIHJldHVybiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIgJWQgOjogJXMiLCBlbnYtPmVycm9yLT5lcnJvcl9udW1iZXIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFYSVMyX0VSUk9SX0dFVF9NRVNTQUdFKGVudi0+ZXJyb3IpKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBWElTMl9GQUlMVVJFOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgIHJldHVybiBzdGF0 dXM7CiAgICAgICB9CgogICAgICAgIAogICAgICAgIAogICAgICAgIGF4aW9tX25vZGVfdCog QVhJUzJfQ0FMTAogICAgICAgIGFkYl92ZXJzaW9uUmVzcG9uc2Vfc2VyaWFsaXplKAogICAg ICAgICAgICAgICAgYWRiX3ZlcnNpb25SZXNwb25zZV90KiBfdmVyc2lvblJlc3BvbnNlLAog ICAgICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYsIGF4aW9tX25vZGVfdCog cGFyZW50LCBpbnQgaGFzX3BhcmVudCwgaW50IHRhZ19jbG9zZWQpCiAgICAgICAgewogICAg ICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYXhpb21fbmFtZXNwYWNl X3QgKm5zMSA9IE5VTEw7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgYXhp czJfY2hhcl90ICp0ZXh0X3ZhbHVlXzE7CiAgICAgICAgICAgICAgICAgICAgYXhpczJfY2hh cl90ICp0ZXh0X3ZhbHVlXzFfdGVtcDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgYXhpb21fbm9kZV90ICpjdXJyZW50X25vZGUgPSBOVUxMOwogICAgICAgICAgICAg ICBheGlvbV9lbGVtZW50X3QgKmN1cnJlbnRfZWxlbWVudCA9IE5VTEw7CiAgICAgICAgICAg ICAgIGF4aXMyX2NoYXJfdCAqc3RhcnRfaW5wdXRfc3RyID0gTlVMTDsKICAgICAgICAgICAg ICAgYXhpczJfY2hhcl90ICplbmRfaW5wdXRfc3RyID0gTlVMTDsKICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHN0YXJ0X2lucHV0X3N0cl9sZW4gPSAwOwogICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgZW5kX2lucHV0X3N0cl9sZW4gPSAwOwogICAgICAgICAgICAgCiAgICAg ICAgICAgICAgIGF4aW9tX2RhdGFfc291cmNlX3QgKmRhdGFfc291cmNlID0gTlVMTDsKICAg ICAgICAgICAgICAgYXh1dGlsX3N0cmVhbV90ICpzdHJlYW0gPSBOVUxMOwogICAgICAgICAg ICAKICAgICAgICAgICAgQVhJUzJfRU5WX0NIRUNLKGVudiwgTlVMTCk7CgogICAgICAgICAg ICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgbnMxID0gYXhpb21fbmFtZXNwYWNl X2NyZWF0ZSAoZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJodHRwOi8vYXVnZXIuZnprLm9yZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIm5zMSIpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlm KCBwYXJlbnQgPT0gTlVMTCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICBjdXJyZW50X2VsZW1lbnQgPSBheGlvbV9lbGVtZW50X2NyZWF0ZSAoZW52LCBwYXJlbnQs ICJ2ZXJzaW9uUmVzcG9uc2UiLCBuczEgLCAmY3VycmVudF9ub2RlKTsKICAgICAgICAgICAg ICAgICAgICBheGlvbV9lbGVtZW50X3NldF9uYW1lc3BhY2UoIGN1cnJlbnRfZWxlbWVudCwg ZW52LCBuczEsIGN1cnJlbnRfbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgcGFyZW50ID0gY3VycmVudF9ub2RlOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKGhhc19wYXJlbnQpCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZGF0YV9zb3VyY2UgPSAoYXhpb21fZGF0 YV9zb3VyY2VfdCAqKWF4aW9tX25vZGVfZ2V0X2RhdGFfZWxlbWVudChwYXJlbnQsIGVudik7 CiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhX3NvdXJjZSkKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gYXhp b21fZGF0YV9zb3VyY2VfZ2V0X3N0cmVhbShkYXRhX3NvdXJjZSwgZW52KTsgLyogYXNzdW1l IHBhcmVudCBpcyBvZiB0eXBlIGRhdGEgc291cmNlICovCiAgICAgICAgICAgICAgICAgICAg aWYgKCFzdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAg ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9ub2RlID0g cGFyZW50OwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgZGF0YV9zb3VyY2UgPSBheGlvbV9kYXRhX3NvdXJjZV9jcmVhdGUo ZW52LCBwYXJlbnQsICZjdXJyZW50X25vZGUpOwogICAgICAgICAgICAgICAgICAgIHN0cmVh bSA9IGF4aW9tX2RhdGFfc291cmNlX2dldF9zdHJlYW0oZGF0YV9zb3VyY2UsIGVudik7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgKiBwYXJz aW5nIHJldHVybiBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAg ICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2lucHV0X3N0ciA9ICI8bnMxOnJldHVy bj4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg ICAgIHN0YXJ0X2lucHV0X3N0cl9sZW4gPSBheHV0aWxfc3RybGVuKHN0YXJ0X2lucHV0X3N0 cik7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9pbnB1dF9zdHIgPSAiPC9uczE6cmV0 dXJuPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9pbnB1dF9zdHJfbGVuID0gYXh1 dGlsX3N0cmxlbihlbmRfaW5wdXRfc3RyKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGV4dF92YWx1ZV8xID0gX3ZlcnNpb25SZXNwb25zZS0+ YXR0cmliX3JldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXh1dGlsX3N0cmVh bV93cml0ZShzdHJlYW0sIGVudiwgc3RhcnRfaW5wdXRfc3RyLCBzdGFydF9pbnB1dF9zdHJf bGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZXh0X3ZhbHVlXzFfdGVtcCA9IGF4dXRpbF94bWxfcXVvdGVfc3RyaW5nKGVu diwgdGV4dF92YWx1ZV8xLCBBWElTMl9UUlVFKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHRleHRfdmFsdWVfMV90ZW1wKQogICAgICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheHV0aWxfc3RyZWFtX3dyaXRlKHN0 cmVhbSwgZW52LCB0ZXh0X3ZhbHVlXzFfdGVtcCwgYXh1dGlsX3N0cmxlbih0ZXh0X3ZhbHVl XzFfdGVtcCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVhJUzJfRlJFRShl bnYtPmFsbG9jYXRvciwgdGV4dF92YWx1ZV8xX3RlbXApOwogICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXh1dGls X3N0cmVhbV93cml0ZShzdHJlYW0sIGVudiwgdGV4dF92YWx1ZV8xLCBheHV0aWxfc3RybGVu KHRleHRfdmFsdWVfMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGF4dXRpbF9zdHJlYW1fd3JpdGUoc3RyZWFtLCBlbnYsIGVu ZF9pbnB1dF9zdHIsIGVuZF9pbnB1dF9zdHJfbGVuKTsKICAgICAgICAgICAgICAgICAgICAg ICAgCiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAgICAgICAgfQoKCiAgICAgICAgCiAg ICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBnZXR0ZXIgZm9yIHJldHVybi4KICAgICAg ICAgICAgICovCiAgICAgICAgICAgIGF4aXMyX2NoYXJfdCogQVhJUzJfQ0FMTAogICAgICAg ICAgICBhZGJfdmVyc2lvblJlc3BvbnNlX2dldF9yZXR1cm4oCiAgICAgICAgICAgICAgICAg ICAgYWRiX3ZlcnNpb25SZXNwb25zZV90KiBfdmVyc2lvblJlc3BvbnNlLAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52KQogICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgQVhJUzJfRU5WX0NIRUNLKGVudiwgQVhJUzJfRkFJTFVSRSk7CgogICAg ICAgICAgICAgICAgcmV0dXJuIF92ZXJzaW9uUmVzcG9uc2UtPmF0dHJpYl9yZXR1cm47CiAg ICAgICAgICAgICB9CgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogc2V0dGVyIGZv ciByZXR1cm4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGF4aXMyX3N0YXR1c190IEFY SVMyX0NBTEwKICAgICAgICAgICAgYWRiX3ZlcnNpb25SZXNwb25zZV9zZXRfcmV0dXJuKAog ICAgICAgICAgICAgICAgICAgIGFkYl92ZXJzaW9uUmVzcG9uc2VfdCogX3ZlcnNpb25SZXNw b25zZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudiwKICAg ICAgICAgICAgICAgICAgICBheGlzMl9jaGFyX3QqICBwYXJhbV9yZXR1cm4pCiAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICBBWElTMl9FTlZfQ0hF Q0soZW52LCBBWElTMl9GQUlMVVJFKTsKICAgICAgICAgICAgICAgIGlmKCFfdmVyc2lvblJl c3BvbnNlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBB WElTMl9GQUlMVVJFOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICBfdmVy c2lvblJlc3BvbnNlLT5hdHRyaWJfcmV0dXJuID0gKGF4aXMyX2NoYXJfdCAqKWF4dXRpbF9z dHJkdXAoZW52LCBwYXJhbV9yZXR1cm4pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgcmV0dXJuIEFYSVMyX1NVQ0NFU1M7CiAgICAgICAgICAgICB9CgogICAgICAg ICAgICAKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABleGNlcHRpb25U ZXN0L3NyYy9hZGJfdmVyc2lvblJlc3BvbnNlLmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAw MTE2MTEAMDAwMDAwMTAyNzQAMTA3MjAzMDE2MTEAMDIxMDU2ACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABpcGV1c2VycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAoKICAgICAgICAjaWZuZGVmIEFEQl9WRVJTSU9OUkVTUE9OU0Vf SAogICAgICAgICNkZWZpbmUgQURCX1ZFUlNJT05SRVNQT05TRV9ICgogICAgICAgIC8qKgog ICAgICAgICogYWRiX3ZlcnNpb25SZXNwb25zZS5oCiAgICAgICAgKgogICAgICAgICogVGhp cyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9tIFdTREwKICAgICAgICAqIGJ5IHRoZSBB cGFjaGUgQXhpczIvSmF2YSB2ZXJzaW9uOiBTTkFQU0hPVCAgQnVpbHQgb24gOiBPY3QgMDIs IDIwMDcgKDA4OjIzOjM5IEdNVCswMDowMCkKICAgICAgICAqLwoKICAgICAgICAKCiAgICAg ICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAgICAgI2luY2x1ZGUgPGF4aW9tLmg+CiAgICAg ICAgI2luY2x1ZGUgPGF4aXMyX3V0aWwuaD4KICAgICAgICAjaW5jbHVkZSA8YXhpb21fc29h cC5oPgogICAgICAgICNpbmNsdWRlIDxheGlzMl9jbGllbnQuaD4KCiAgICAgICAgI2lmZGVm IF9fY3BsdXNwbHVzCiAgICAgICAgZXh0ZXJuICJDIgogICAgICAgIHsKICAgICAgICAjZW5k aWYKCiAgICAgICAgI2RlZmluZSBBWElTMl9ERUZBVUxUX0RJR0lUX0xJTUlUIDY0CiAgICAg ICAvKioKICAgICAgICAqICBhZGJfdmVyc2lvblJlc3BvbnNlIGNsYXNzCiAgICAgICAgKi8K ICAgICAgICB0eXBlZGVmIHN0cnVjdCBhZGJfdmVyc2lvblJlc3BvbnNlIGFkYl92ZXJzaW9u UmVzcG9uc2VfdDsKCiAgICAgICAgLyoqCiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGNy ZWF0aW5nIGFkYl92ZXJzaW9uUmVzcG9uc2VfdAogICAgICAgICAqIEBwYXJhbSBlbnYgcG9p bnRlciB0byBlbnZpcm9ubWVudCBzdHJ1Y3QKICAgICAgICAgKiBAcmV0dXJuIG5ld2x5IGNy ZWF0ZWQgYWRiX3ZlcnNpb25SZXNwb25zZV90IG9iamVjdAogICAgICAgICAqLwogICAgICAg IEFYSVMyX0VYVEVSTiBhZGJfdmVyc2lvblJlc3BvbnNlX3QqIEFYSVMyX0NBTEwKICAgICAg ICBhZGJfdmVyc2lvblJlc3BvbnNlX2NyZWF0ZSgKICAgICAgICAgICAgY29uc3QgYXh1dGls X2Vudl90ICplbnYgKTsKCiAgICAgICAgLyoqCiAgICAgICAgICogRnJlZSBhZGJfdmVyc2lv blJlc3BvbnNlX3Qgb2JqZWN0CiAgICAgICAgICogQHBhcmFtICBfdmVyc2lvblJlc3BvbnNl YWRiX3ZlcnNpb25SZXNwb25zZV90IG9iamVjdCB0byBmcmVlCiAgICAgICAgICogQHBhcmFt IGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVjdAogICAgICAgICAqIEByZXR1cm4g QVhJUzJfU1VDQ0VTUyBvbiBzdWNjZXNzLCBlbHNlIEFYSVMyX0ZBSUxVUkUKICAgICAgICAg Ki8KICAgICAgICBheGlzMl9zdGF0dXNfdCBBWElTMl9DQUxMCiAgICAgICAgYWRiX3ZlcnNp b25SZXNwb25zZV9mcmVlICgKICAgICAgICAgICAgYWRiX3ZlcnNpb25SZXNwb25zZV90KiBf dmVyc2lvblJlc3BvbnNlLAogICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudik7 CgogICAgICAgIC8qKgogICAgICAgICAqIEdldHRlciBmb3IgdGhlIHFuYW1lIG9mIHRoZSBl bGVtZW50IG9yIHRoZSB0eXBlIHJlZmVycmVkIGluIHRoZSBoZWFkZXIKICAgICAgICAgKiBA cGFyYW0gIF92ZXJzaW9uUmVzcG9uc2VhZGJfdmVyc2lvblJlc3BvbnNlX3Qgb2JqZWN0CiAg ICAgICAgICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVjdAogICAg ICAgICAqIEByZXR1cm4gdGhlIHFuYW1lIG9mIHRoZSBlbGVtZW50IG9yIHRoZSB0eXBlCiAg ICAgICAgICovCiAgICAgICAgCiAgICAgICAgYXh1dGlsX3FuYW1lX3QqIEFYSVMyX0NBTEwK ICAgICAgICBhZGJfdmVyc2lvblJlc3BvbnNlX2dldF9xbmFtZSAoCiAgICAgICAgICAgIGFk Yl92ZXJzaW9uUmVzcG9uc2VfdCogX3ZlcnNpb25SZXNwb25zZSwKICAgICAgICAgICAgY29u c3QgYXh1dGlsX2Vudl90ICplbnYpOwogICAgICAgIAoKICAgICAgICAvKioKICAgICAgICAg KiBEZXNlcmlhbGl6ZSBhbiBYTUwgdG8gYWRiIG9iamVjdHMKICAgICAgICAgKiBAcGFyYW0g IF92ZXJzaW9uUmVzcG9uc2VhZGJfdmVyc2lvblJlc3BvbnNlX3Qgb2JqZWN0CiAgICAgICAg ICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVjdAogICAgICAgICAq IEBwYXJhbSBwYXJlbnQgdG8gZGVzZXJpYWxpemUKICAgICAgICAgKiBAcmV0dXJuIEFYSVMy X1NVQ0NFU1Mgb24gc3VjY2VzcywgZWxzZSBBWElTMl9GQUlMVVJFCiAgICAgICAgICovCiAg ICAgICAgYXhpczJfc3RhdHVzX3QgQVhJUzJfQ0FMTAogICAgICAgIGFkYl92ZXJzaW9uUmVz cG9uc2VfZGVzZXJpYWxpemUoCiAgICAgICAgICAgIGFkYl92ZXJzaW9uUmVzcG9uc2VfdCog X3ZlcnNpb25SZXNwb25zZSwKICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYs IGF4aW9tX25vZGVfdCogcGFyZW50KTsKCiAgICAgICAgLyoqCiAgICAgICAgICogU2VyaWFs aXplIHRvIGEgU3RyaW5nIGZyb20gdGhlIGFkYiBvYmplY3RzCiAgICAgICAgICogQHBhcmFt ICBfdmVyc2lvblJlc3BvbnNlYWRiX3ZlcnNpb25SZXNwb25zZV90IG9iamVjdAogICAgICAg ICAqIEBwYXJhbSBlbnYgcG9pbnRlciB0byBlbnZpcm9ubWVudCBzdHJ1Y3QKICAgICAgICAg KiBAcmV0dXJuIHNlcmlhbGl6ZWQgc3RyaW5nCiAgICAgICAgICovCiAgICAgICAgCgogICAg ICAgIC8qKgogICAgICAgICAqIFNlcmlhbGl6ZSB0byBhbiBYTUwgZnJvbSB0aGUgYWRiIG9i amVjdHMKICAgICAgICAgKiBAcGFyYW0gIF92ZXJzaW9uUmVzcG9uc2VhZGJfdmVyc2lvblJl c3BvbnNlX3Qgb2JqZWN0CiAgICAgICAgICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVudmly b25tZW50IHN0cnVjdAogICAgICAgICAqIEBwYXJhbSB2ZXJzaW9uUmVzcG9uc2Vfb21fbm9k ZSBub2RlIHRvIHNlcmlhbGl6ZSBmcm9tCiAgICAgICAgICogQHBhcmFtIGhhc19wYXJlbnQg aXMgdGhlIGVsZW1lbnQgaGFzIGEgcGFyZW50CiAgICAgICAgICogQHBhcmFtIHRhZ19jbG9z ZWQgd2hldGhlciB0aGUgcGFyZW50IHRhZyBpcyBjbG9zZWQgb3Igbm90CiAgICAgICAgICog QHJldHVybiBBWElTMl9TVUNDRVNTIG9uIHN1Y2Nlc3MsIGVsc2UgQVhJUzJfRkFJTFVSRQog ICAgICAgICAqLwogICAgICAgIGF4aW9tX25vZGVfdCogQVhJUzJfQ0FMTAogICAgICAgIGFk Yl92ZXJzaW9uUmVzcG9uc2Vfc2VyaWFsaXplKAogICAgICAgICAgICBhZGJfdmVyc2lvblJl c3BvbnNlX3QqIF92ZXJzaW9uUmVzcG9uc2UsCiAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9l bnZfdCAqZW52LAogICAgICAgICAgICBheGlvbV9ub2RlX3QqIHZlcnNpb25SZXNwb25zZV9v bV9ub2RlLCBpbnQgaGFzX3BhcmVudCwgaW50IHRhZ19jbG9zZWQpOwoKCiAgICAgICAgCiAg ICAgICAgLyoqCiAgICAgICAgICogR2V0dGVyIGZvciByZXR1cm4uCiAgICAgICAgICogQHBh cmFtICBfdmVyc2lvblJlc3BvbnNlYWRiX3ZlcnNpb25SZXNwb25zZV90IG9iamVjdAogICAg ICAgICAqIEBwYXJhbSBlbnYgcG9pbnRlciB0byBlbnZpcm9ubWVudCBzdHJ1Y3QKICAgICAg ICAgKiBAcmV0dXJuIGF4aXMyX2NoYXJfdCoKICAgICAgICAgKi8KICAgICAgICBheGlzMl9j aGFyX3QqIEFYSVMyX0NBTEwKICAgICAgICBhZGJfdmVyc2lvblJlc3BvbnNlX2dldF9yZXR1 cm4oCiAgICAgICAgICAgIGFkYl92ZXJzaW9uUmVzcG9uc2VfdCogX3ZlcnNpb25SZXNwb25z ZSwKICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYpOwoKICAgICAgICAvKioK ICAgICAgICAgKiBTZXR0ZXIgZm9yIHJldHVybi4KICAgICAgICAgKiBAcGFyYW0gIF92ZXJz aW9uUmVzcG9uc2VhZGJfdmVyc2lvblJlc3BvbnNlX3Qgb2JqZWN0CiAgICAgICAgICogQHBh cmFtIGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVjdAogICAgICAgICAqIEBwYXJh bSBwYXJhbV9yZXR1cm4gYXhpczJfY2hhcl90KgogICAgICAgICAqIEByZXR1cm4gQVhJUzJf U1VDQ0VTUyBvbiBzdWNjZXNzLCBlbHNlIEFYSVMyX0ZBSUxVUkUKICAgICAgICAgKi8KICAg ICAgICBheGlzMl9zdGF0dXNfdCBBWElTMl9DQUxMCiAgICAgICAgYWRiX3ZlcnNpb25SZXNw b25zZV9zZXRfcmV0dXJuKAogICAgICAgICAgICBhZGJfdmVyc2lvblJlc3BvbnNlX3QqIF92 ZXJzaW9uUmVzcG9uc2UsCiAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52LAog ICAgICAgICAgICBheGlzMl9jaGFyX3QqICBwYXJhbV9yZXR1cm4pOwoKICAgICAgICAKCiAg ICAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgICAgfQogICAgICNlbmRpZgoKICAgICAjZW5kaWYg LyogQURCX1ZFUlNJT05SRVNQT05TRV9IICovCiAgICAKCgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGV4Y2VwdGlvblRlc3Qvc3JjL2Fk Yl92ZXJzaW9uLmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjQ0ADAwMTIwNTQAMDAxMTYxMQAwMDAw MDAyNTczMQAxMDcyMDMwMTYxMQAwMTczMzYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABzdXR0ZXItbQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAGlwZXVzZXJzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAACiAgICAgICAvKioKICAgICAgICAqIGFkYl92ZXJzaW9uLmgKICAgICAgICAqCiAg ICAgICAgKiBUaGlzIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGZyb20gV1NETAogICAgICAg ICogYnkgdGhlIEFwYWNoZSBBeGlzMi9DIHZlcnNpb246IFNOQVBTSE9UICBCdWlsdCBvbiA6 IE9jdCAwMiwgMjAwNyAoMDg6MjM6MzkgR01UKzAwOjAwKQogICAgICAgICoKICAgICAgICAq LwoKICAgICAgICAjaW5jbHVkZSAiYWRiX3ZlcnNpb24uaCIKICAgICAgICAgIAogICAgICAg ICAgICAgIC8qKgogICAgICAgICAgICAgICAqIGltcGxtZW50YXRpb24gb2YgdGhlIHZlcnNp b258aHR0cDovL2F1Z2VyLmZ6ay5vcmcgZWxlbWVudAogICAgICAgICAgICAgICAqLwogICAg ICAgICAgICAgCgoKICAgICAgICBzdHJ1Y3QgYWRiX3ZlcnNpb24KICAgICAgICB7CiAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgYXh1dGlsX3FuYW1lX3QqIHFuYW1lOwogICAgICAg ICAgICBheGlzMl9jaGFyX3QqIGF0dHJpYl9pbnB1dDsKICAgICAgICAgICAgCiAgICAgICAg fTsKCgogICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiogRnVuY3Rpb24gSW1wbG1l bnRhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgICAgQVhJ UzJfRVhURVJOIGFkYl92ZXJzaW9uX3QqIEFYSVMyX0NBTEwKICAgICAgICBhZGJfdmVyc2lv bl9jcmVhdGUoCiAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52ICkKICAgICAg ICB7CiAgICAgICAgICAgIGFkYl92ZXJzaW9uX3QgKl92ZXJzaW9uID0gTlVMTDsKICAgICAg ICAgICAgCiAgICAgICAgICAgICAgYXh1dGlsX3FuYW1lX3QqIHFuYW1lID0gTlVMTDsKICAg ICAgICAgICAgCiAgICAgICAgICAgIEFYSVMyX0VOVl9DSEVDSyhlbnYsIE5VTEwpOwoKICAg ICAgICAgICAgX3ZlcnNpb24gPSAoYWRiX3ZlcnNpb25fdCAqKSBBWElTMl9NQUxMT0MoZW52 LT4KICAgICAgICAgICAgICAgIGFsbG9jYXRvciwgc2l6ZW9mKGFkYl92ZXJzaW9uX3QpKTsK CiAgICAgICAgICAgIGlmKE5VTEwgPT0gX3ZlcnNpb24pCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIEFYSVMyX0VSUk9SX1NFVChlbnYtPmVycm9yLCBBWElTMl9FUlJPUl9OT19N RU1PUlksIEFYSVMyX0ZBSUxVUkUpOwogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAg ICAgICAgICAgIH0KCiAgICAgICAgICAgIG1lbXNldChfdmVyc2lvbiwgMCwgc2l6ZW9mKGFk Yl92ZXJzaW9uX3QpKTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgIHFuYW1lID0gIGF4 dXRpbF9xbmFtZV9jcmVhdGUgKGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNp b24iLAogICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2F1Z2VyLmZ6ay5vcmciLAog ICAgICAgICAgICAgICAgICAgICAgICAibnMxIik7CgogICAgICAgICAgICAgIF92ZXJzaW9u LT5xbmFtZSA9IHFuYW1lOwogICAgICAgICAgICAKCiAgICAgICAgICAgIHJldHVybiBfdmVy c2lvbjsKICAgICAgICB9CgogICAgICAgIGF4aXMyX3N0YXR1c190IEFYSVMyX0NBTEwKICAg ICAgICBhZGJfdmVyc2lvbl9mcmVlICgKICAgICAgICAgICAgICAgIGFkYl92ZXJzaW9uX3Qq IF92ZXJzaW9uLAogICAgICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYpCiAg ICAgICAgewogICAgICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICBBWElTMl9F TlZfQ0hFQ0soZW52LCBBWElTMl9GQUlMVVJFKTsKCiAgICAgICAgICAgIAoKICAgICAgICAg ICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICBpZiggX3ZlcnNpb24tPmF0 dHJpYl9pbnB1dCAhPSBOVUxMKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgIEFYSVMyX0ZSRUUoIGVu di0+IGFsbG9jYXRvciwgX3ZlcnNpb24tPmF0dHJpYl9pbnB1dCk7CiAgICAgICAgICAgICAg ICAgICBfdmVyc2lvbi0+YXR0cmliX2lucHV0ID0gTlVMTDsKICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgIAogICAgICAgICAgICAgIAogICAgICAgICAgICAgIAogICAgICAgICAg ICAgIGlmKF92ZXJzaW9uLT5xbmFtZSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBheHV0aWxfcW5hbWVfZnJlZSAoX3ZlcnNpb24tPnFuYW1lLCBlbnYpOwogICAgICAg ICAgICAgICAgICBfdmVyc2lvbi0+cW5hbWUgPSBOVUxMOwogICAgICAgICAgICAgIH0KICAg ICAgICAgICAgCgogICAgICAgICAgICBpZihfdmVyc2lvbikKICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgQVhJUzJfRlJFRSggZW52LT5hbGxvY2F0b3IsIF92ZXJzaW9uKTsKICAg ICAgICAgICAgICAgIF92ZXJzaW9uID0gTlVMTDsKICAgICAgICAgICAgfQogICAgICAgICAg ICByZXR1cm4gQVhJUzJfU1VDQ0VTUzsKICAgICAgICB9CgogICAgICAgICAgCiAgICAgICAg ICAgYXh1dGlsX3FuYW1lX3QqIEFYSVMyX0NBTEwKICAgICAgICAgICBhZGJfdmVyc2lvbl9n ZXRfcW5hbWUgKAogICAgICAgICAgICAgICAgICAgYWRiX3ZlcnNpb25fdCogX3ZlcnNpb24s CiAgICAgICAgICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudikKICAgICAgICAg ICB7CiAgICAgICAgICAgICAgIEFYSVMyX0VOVl9DSEVDSyhlbnYsIEFYSVMyX0ZBSUxVUkUp OwoKICAgICAgICAgICAgICAgcmV0dXJuIF92ZXJzaW9uLT4gcW5hbWU7CiAgICAgICAgICAg fQogICAgICAgIAoKICAgICAgICBheGlzMl9zdGF0dXNfdCBBWElTMl9DQUxMCiAgICAgICAg YWRiX3ZlcnNpb25fZGVzZXJpYWxpemUoCiAgICAgICAgICAgICAgICBhZGJfdmVyc2lvbl90 KiBfdmVyc2lvbiwKICAgICAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52LAog ICAgICAgICAgICAgICAgYXhpb21fbm9kZV90KiBwYXJlbnQpCiAgICAgICAgewogICAgICAg ICAgYXhpczJfc3RhdHVzX3Qgc3RhdHVzID0gQVhJUzJfU1VDQ0VTUzsKICAgICAgICAgICAK ICAgICAgICAgICAgIGF4aXMyX2NoYXJfdCogdGV4dF92YWx1ZSA9IE5VTEw7CiAgICAgICAg ICAgICBheHV0aWxfcW5hbWVfdCAqcW5hbWUgPSBOVUxMOwogICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICBheGlvbV9uYW1lc3BhY2VfdCAqbnMxID0gTlVMTDsKICAgICAgICAgICAg ICAKICAgICAgICAgICAgICAgYXhpb21fbm9kZV90ICpmaXJzdF9ub2RlID0gTlVMTDsKICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgYXhpb21fbm9kZV90 ICpjdXJyZW50X25vZGUgPSBOVUxMOwogICAgICAgICAgICAgICBheGlvbV9lbGVtZW50X3Qg KmN1cnJlbnRfZWxlbWVudCA9IE5VTEw7CiAgICAgICAgICAgIAogICAgICAgICAgICBBWElT Ml9FTlZfQ0hFQ0soZW52LCBBWElTMl9GQUlMVVJFKTsKCiAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgIG5zMSA9IGF4aW9tX25hbWVzcGFjZV9jcmVhdGUgKGVudiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2F1Z2VyLmZ6ay5vcmci LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuczEiKTsKICAg ICAgICAgICAgICAKICAgICAgICAgICAgICBpZiAoIE5VTEwgPT0gcGFyZW50ICkKICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAvKiogVGhpcyBzaG91bGQgYmUgY2hlY2tlZCBh Ym92ZSAqLwogICAgICAgICAgICAgICAgQVhJUzJfTE9HX0VSUk9SKGVudi0+bG9nLCBBWElT Ml9MT0dfU0ksICJOVUxMIGVsZW1lbmV0IGZvciB2ZXJzaW9uIgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAlZCA6OiAlcyIsIGVudi0+ZXJyb3It PmVycm9yX251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFYSVMyX0VSUk9SX0dFVF9NRVNTQUdFKGVudi0+ZXJyb3IpKTsKICAgICAgICAg ICAgICAgIHJldHVybiBBWElTMl9GQUlMVVJFOwogICAgICAgICAgICAgIH0KICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICAgICAgY3VycmVudF9lbGVtZW50ID0gKGF4aW9tX2VsZW1l bnRfdCAqKWF4aW9tX25vZGVfZ2V0X2RhdGFfZWxlbWVudCggcGFyZW50LCBlbnYpOwogICAg ICAgICAgICAgICAgICAgIHFuYW1lID0gYXhpb21fZWxlbWVudF9nZXRfcW5hbWUoIGN1cnJl bnRfZWxlbWVudCwgZW52LCBwYXJlbnQpOwogICAgICAgICAgICAgICAgICAgIGlmICggYXh1 dGlsX3FuYW1lX2VxdWFscyggcW5hbWUsIGVudiwgX3ZlcnNpb24tPiBxbmFtZSApICkKICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgICAgICAgIGZpcnN0X25vZGUgPSBheGlvbV9ub2RlX2dldF9maXJzdF9jaGls ZCggcGFyZW50LCBlbnYpOwogICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICBBWElTMl9MT0dfRVJST1IoZW52LT5sb2cs IEFYSVMyX0xPR19TSSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQg aW4gYnVpbGRpbmcgYWRiIG9iamVjdCBmb3IgdmVyc2lvbiA6ICIKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIldyb25nIFhNTCB0byBkZXNlcmlhbGl6ZSIpOwogICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFYSVMyX0ZB SUxVUkU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAoKICAg ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAg ICAgICAgICAgICAgKiBidWlsZGluZyBpbnB1dCBlbGVtZW50CiAgICAgICAgICAgICAgICAg ICAgICAqLwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGN1cnJlbnRfbm9kZSA9IGZpcnN0X25vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGN1cnJlbnRfbm9kZSAgJiYgYXhpb21fbm9kZV9nZXRfZGF0YV9lbGVt ZW50KCBjdXJyZW50X25vZGUsIGVudikgJiYgIWF4dXRpbF9zdHJjbXAoImlucHV0IiwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9tX2VsZW1lbnRfZ2V0X2xvY2FsbmFtZSgo YXhpb21fZWxlbWVudF90ICopYXhpb21fbm9kZV9nZXRfZGF0YV9lbGVtZW50KCBjdXJyZW50 X25vZGUsIGVudiksIGVudikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dXJyZW50X2VsZW1lbnQgPSAoYXhpb21fZWxlbWVudF90ICopYXhpb21fbm9kZV9nZXRfZGF0 YV9lbGVtZW50KCBjdXJyZW50X25vZGUsIGVudik7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGV4dF92YWx1ZSA9IGF4aW9tX2VsZW1lbnRfZ2V0X3RleHQoY3Vy cmVudF9lbGVtZW50LCBlbnYsIGN1cnJlbnRfbm9kZSApOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IGFkYl92ZXJzaW9uX3NldF9pbnB1dCggX3Zl cnNpb24sIGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfdmFsdWUpOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYoIEFYSVMyX0ZBSUxVUkUgPT0gIHN0YXR1cykKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVhJUzJf TE9HX0VSUk9SKGVudi0+bG9nLCBBWElTMl9MT0dfU0ksICJmYWlsZWQgaW4gc2V0dGluZyB0 aGUgdmFsdWUgZm9yIGlucHV0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIiAlZCA6OiAlcyIsIGVudi0+ZXJyb3ItPmVycm9y X251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVhJUzJfRVJST1JfR0VUX01FU1NBR0UoZW52LT5lcnJvcikpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFYSVMyX0ZBSUxVUkU7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgcmV0 dXJuIHN0YXR1czsKICAgICAgIH0KCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgYXhpb21f bm9kZV90KiBBWElTMl9DQUxMCiAgICAgICAgYWRiX3ZlcnNpb25fc2VyaWFsaXplKAogICAg ICAgICAgICAgICAgYWRiX3ZlcnNpb25fdCogX3ZlcnNpb24sCiAgICAgICAgICAgICAgICBj b25zdCBheHV0aWxfZW52X3QgKmVudiwgYXhpb21fbm9kZV90KiBwYXJlbnQsIGludCBoYXNf cGFyZW50LCBpbnQgdGFnX2Nsb3NlZCkKICAgICAgICB7CiAgICAgICAgICAgIAogICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICBheGlvbV9uYW1lc3BhY2VfdCAqbnMxID0gTlVMTDsK ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBheGlzMl9jaGFyX3QgKnRleHRf dmFsdWVfMTsKICAgICAgICAgICAgICAgICAgICBheGlzMl9jaGFyX3QgKnRleHRfdmFsdWVf MV90ZW1wOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBheGlvbV9ub2Rl X3QgKmN1cnJlbnRfbm9kZSA9IE5VTEw7CiAgICAgICAgICAgICAgIGF4aW9tX2VsZW1lbnRf dCAqY3VycmVudF9lbGVtZW50ID0gTlVMTDsKICAgICAgICAgICAgICAgYXhpczJfY2hhcl90 ICpzdGFydF9pbnB1dF9zdHIgPSBOVUxMOwogICAgICAgICAgICAgICBheGlzMl9jaGFyX3Qg KmVuZF9pbnB1dF9zdHIgPSBOVUxMOwogICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3Rh cnRfaW5wdXRfc3RyX2xlbiA9IDA7CiAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBlbmRf aW5wdXRfc3RyX2xlbiA9IDA7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgYXhpb21f ZGF0YV9zb3VyY2VfdCAqZGF0YV9zb3VyY2UgPSBOVUxMOwogICAgICAgICAgICAgICBheHV0 aWxfc3RyZWFtX3QgKnN0cmVhbSA9IE5VTEw7CiAgICAgICAgICAgIAogICAgICAgICAgICBB WElTMl9FTlZfQ0hFQ0soZW52LCBOVUxMKTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAg CiAgICAgICAgICAgICAgICBuczEgPSBheGlvbV9uYW1lc3BhY2VfY3JlYXRlIChlbnYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9hdWdlci5m emsub3JnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibnMx Iik7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYoIHBhcmVudCA9PSBOVUxM KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZWxlbWVu dCA9IGF4aW9tX2VsZW1lbnRfY3JlYXRlIChlbnYsIHBhcmVudCwgInZlcnNpb24iLCBuczEg LCAmY3VycmVudF9ub2RlKTsKICAgICAgICAgICAgICAgICAgICBheGlvbV9lbGVtZW50X3Nl dF9uYW1lc3BhY2UoIGN1cnJlbnRfZWxlbWVudCwgZW52LCBuczEsIGN1cnJlbnRfbm9kZSk7 CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gY3Vy cmVudF9ub2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAg ICAgICAgIGlmKGhhc19wYXJlbnQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgZGF0YV9zb3VyY2UgPSAoYXhpb21fZGF0YV9zb3VyY2VfdCAqKWF4aW9tX25vZGVf Z2V0X2RhdGFfZWxlbWVudChwYXJlbnQsIGVudik7CiAgICAgICAgICAgICAgICAgICAgaWYg KCFkYXRhX3NvdXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAg ICAgICAgICAgICAgICAgICAgc3RyZWFtID0gYXhpb21fZGF0YV9zb3VyY2VfZ2V0X3N0cmVh bShkYXRhX3NvdXJjZSwgZW52KTsgLyogYXNzdW1lIHBhcmVudCBpcyBvZiB0eXBlIGRhdGEg c291cmNlICovCiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0pCiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAgICAgICAgICAgICAgY3VycmVudF9ub2RlID0gcGFyZW50OwogICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZGF0YV9zb3Vy Y2UgPSBheGlvbV9kYXRhX3NvdXJjZV9jcmVhdGUoZW52LCBwYXJlbnQsICZjdXJyZW50X25v ZGUpOwogICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGF4aW9tX2RhdGFfc291cmNlX2dl dF9zdHJlYW0oZGF0YV9zb3VyY2UsIGVudik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8q KgogICAgICAgICAgICAgICAgICAgICAgKiBwYXJzaW5nIGlucHV0IGVsZW1lbnQKICAgICAg ICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAg ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg c3RhcnRfaW5wdXRfc3RyID0gIjxuczE6aW5wdXQ+IjsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9pbnB1dF9zdHJfbGVuID0g YXh1dGlsX3N0cmxlbihzdGFydF9pbnB1dF9zdHIpOwogICAgICAgICAgICAgICAgICAgICAg ICBlbmRfaW5wdXRfc3RyID0gIjwvbnMxOmlucHV0PiI7CiAgICAgICAgICAgICAgICAgICAg ICAgIGVuZF9pbnB1dF9zdHJfbGVuID0gYXh1dGlsX3N0cmxlbihlbmRfaW5wdXRfc3RyKTsK ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF92 YWx1ZV8xID0gX3ZlcnNpb24tPmF0dHJpYl9pbnB1dDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXh1dGlsX3N0cmVhbV93cml0ZShzdHJlYW0sIGVudiwgc3RhcnRfaW5wdXRfc3Ry LCBzdGFydF9pbnB1dF9zdHJfbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X3ZhbHVlXzFfdGVtcCA9IGF4dXRpbF94 bWxfcXVvdGVfc3RyaW5nKGVudiwgdGV4dF92YWx1ZV8xLCBBWElTMl9UUlVFKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRfdmFsdWVfMV90ZW1wKQogICAgICAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheHV0 aWxfc3RyZWFtX3dyaXRlKHN0cmVhbSwgZW52LCB0ZXh0X3ZhbHVlXzFfdGVtcCwgYXh1dGls X3N0cmxlbih0ZXh0X3ZhbHVlXzFfdGVtcCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQVhJUzJfRlJFRShlbnYtPmFsbG9jYXRvciwgdGV4dF92YWx1ZV8xX3RlbXApOwog ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXh1dGlsX3N0cmVhbV93cml0ZShzdHJlYW0sIGVudiwgdGV4dF92YWx1 ZV8xLCBheHV0aWxfc3RybGVuKHRleHRfdmFsdWVfMSkpOwogICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4dXRpbF9zdHJlYW1fd3Jp dGUoc3RyZWFtLCBlbnYsIGVuZF9pbnB1dF9zdHIsIGVuZF9pbnB1dF9zdHJfbGVuKTsKICAg ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAgICAg ICAgfQoKCiAgICAgICAgCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBnZXR0ZXIg Zm9yIGlucHV0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgYXhpczJfY2hhcl90KiBB WElTMl9DQUxMCiAgICAgICAgICAgIGFkYl92ZXJzaW9uX2dldF9pbnB1dCgKICAgICAgICAg ICAgICAgICAgICBhZGJfdmVyc2lvbl90KiBfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAg ICBjb25zdCBheHV0aWxfZW52X3QgKmVudikKICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIEFYSVMyX0VOVl9DSEVDSyhlbnYsIEFYSVMyX0ZBSUxVUkUpOwoKICAgICAgICAgICAg ICAgIHJldHVybiBfdmVyc2lvbi0+YXR0cmliX2lucHV0OwogICAgICAgICAgICAgfQoKICAg ICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIHNldHRlciBmb3IgaW5wdXQKICAgICAgICAg ICAgICovCiAgICAgICAgICAgIGF4aXMyX3N0YXR1c190IEFYSVMyX0NBTEwKICAgICAgICAg ICAgYWRiX3ZlcnNpb25fc2V0X2lucHV0KAogICAgICAgICAgICAgICAgICAgIGFkYl92ZXJz aW9uX3QqIF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZf dCAqZW52LAogICAgICAgICAgICAgICAgICAgIGF4aXMyX2NoYXJfdCogIHBhcmFtX2lucHV0 KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgQVhJ UzJfRU5WX0NIRUNLKGVudiwgQVhJUzJfRkFJTFVSRSk7CiAgICAgICAgICAgICAgICBpZigh X3ZlcnNpb24pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFYSVMyX0ZBSUxVUkU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIF92 ZXJzaW9uLT5hdHRyaWJfaW5wdXQgPSAoYXhpczJfY2hhcl90ICopYXh1dGlsX3N0cmR1cChl bnYsIHBhcmFtX2lucHV0KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg IHJldHVybiBBWElTMl9TVUNDRVNTOwogICAgICAgICAgICAgfQoKICAgICAgICAgICAgCgoA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABleGNlcHRpb25UZXN0L3Ny Yy9hZGJfdmVyc2lvbi5oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAwMTE2MTEA MDAwMDAwMDc1MDYAMTA3MjAzMDE2MTEAMDE3MzQzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABpcGV1c2VycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAoKICAgICAgICAjaWZuZGVmIEFEQl9WRVJTSU9OX0gKICAgICAgICAjZGVm aW5lIEFEQl9WRVJTSU9OX0gKCiAgICAgICAgLyoqCiAgICAgICAgKiBhZGJfdmVyc2lvbi5o CiAgICAgICAgKgogICAgICAgICogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9t IFdTREwKICAgICAgICAqIGJ5IHRoZSBBcGFjaGUgQXhpczIvSmF2YSB2ZXJzaW9uOiBTTkFQ U0hPVCAgQnVpbHQgb24gOiBPY3QgMDIsIDIwMDcgKDA4OjIzOjM5IEdNVCswMDowMCkKICAg ICAgICAqLwoKICAgICAgICAKCiAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAgICAg I2luY2x1ZGUgPGF4aW9tLmg+CiAgICAgICAgI2luY2x1ZGUgPGF4aXMyX3V0aWwuaD4KICAg ICAgICAjaW5jbHVkZSA8YXhpb21fc29hcC5oPgogICAgICAgICNpbmNsdWRlIDxheGlzMl9j bGllbnQuaD4KCiAgICAgICAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgICAgICAgZXh0ZXJuICJD IgogICAgICAgIHsKICAgICAgICAjZW5kaWYKCiAgICAgICAgI2RlZmluZSBBWElTMl9ERUZB VUxUX0RJR0lUX0xJTUlUIDY0CiAgICAgICAvKioKICAgICAgICAqICBhZGJfdmVyc2lvbiBj bGFzcwogICAgICAgICovCiAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgYWRiX3ZlcnNpb24gYWRi X3ZlcnNpb25fdDsKCiAgICAgICAgLyoqCiAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIGNy ZWF0aW5nIGFkYl92ZXJzaW9uX3QKICAgICAgICAgKiBAcGFyYW0gZW52IHBvaW50ZXIgdG8g ZW52aXJvbm1lbnQgc3RydWN0CiAgICAgICAgICogQHJldHVybiBuZXdseSBjcmVhdGVkIGFk Yl92ZXJzaW9uX3Qgb2JqZWN0CiAgICAgICAgICovCiAgICAgICAgQVhJUzJfRVhURVJOIGFk Yl92ZXJzaW9uX3QqIEFYSVMyX0NBTEwKICAgICAgICBhZGJfdmVyc2lvbl9jcmVhdGUoCiAg ICAgICAgICAgIGNvbnN0IGF4dXRpbF9lbnZfdCAqZW52ICk7CgogICAgICAgIC8qKgogICAg ICAgICAqIEZyZWUgYWRiX3ZlcnNpb25fdCBvYmplY3QKICAgICAgICAgKiBAcGFyYW0gIF92 ZXJzaW9uYWRiX3ZlcnNpb25fdCBvYmplY3QgdG8gZnJlZQogICAgICAgICAqIEBwYXJhbSBl bnYgcG9pbnRlciB0byBlbnZpcm9ubWVudCBzdHJ1Y3QKICAgICAgICAgKiBAcmV0dXJuIEFY SVMyX1NVQ0NFU1Mgb24gc3VjY2VzcywgZWxzZSBBWElTMl9GQUlMVVJFCiAgICAgICAgICov CiAgICAgICAgYXhpczJfc3RhdHVzX3QgQVhJUzJfQ0FMTAogICAgICAgIGFkYl92ZXJzaW9u X2ZyZWUgKAogICAgICAgICAgICBhZGJfdmVyc2lvbl90KiBfdmVyc2lvbiwKICAgICAgICAg ICAgY29uc3QgYXh1dGlsX2Vudl90ICplbnYpOwoKICAgICAgICAvKioKICAgICAgICAgKiBH ZXR0ZXIgZm9yIHRoZSBxbmFtZSBvZiB0aGUgZWxlbWVudCBvciB0aGUgdHlwZSByZWZlcnJl ZCBpbiB0aGUgaGVhZGVyCiAgICAgICAgICogQHBhcmFtICBfdmVyc2lvbmFkYl92ZXJzaW9u X3Qgb2JqZWN0CiAgICAgICAgICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50 IHN0cnVjdAogICAgICAgICAqIEByZXR1cm4gdGhlIHFuYW1lIG9mIHRoZSBlbGVtZW50IG9y IHRoZSB0eXBlCiAgICAgICAgICovCiAgICAgICAgCiAgICAgICAgYXh1dGlsX3FuYW1lX3Qq IEFYSVMyX0NBTEwKICAgICAgICBhZGJfdmVyc2lvbl9nZXRfcW5hbWUgKAogICAgICAgICAg ICBhZGJfdmVyc2lvbl90KiBfdmVyc2lvbiwKICAgICAgICAgICAgY29uc3QgYXh1dGlsX2Vu dl90ICplbnYpOwogICAgICAgIAoKICAgICAgICAvKioKICAgICAgICAgKiBEZXNlcmlhbGl6 ZSBhbiBYTUwgdG8gYWRiIG9iamVjdHMKICAgICAgICAgKiBAcGFyYW0gIF92ZXJzaW9uYWRi X3ZlcnNpb25fdCBvYmplY3QKICAgICAgICAgKiBAcGFyYW0gZW52IHBvaW50ZXIgdG8gZW52 aXJvbm1lbnQgc3RydWN0CiAgICAgICAgICogQHBhcmFtIHBhcmVudCB0byBkZXNlcmlhbGl6 ZQogICAgICAgICAqIEByZXR1cm4gQVhJUzJfU1VDQ0VTUyBvbiBzdWNjZXNzLCBlbHNlIEFY SVMyX0ZBSUxVUkUKICAgICAgICAgKi8KICAgICAgICBheGlzMl9zdGF0dXNfdCBBWElTMl9D QUxMCiAgICAgICAgYWRiX3ZlcnNpb25fZGVzZXJpYWxpemUoCiAgICAgICAgICAgIGFkYl92 ZXJzaW9uX3QqIF92ZXJzaW9uLAogICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVu diwgYXhpb21fbm9kZV90KiBwYXJlbnQpOwoKICAgICAgICAvKioKICAgICAgICAgKiBTZXJp YWxpemUgdG8gYSBTdHJpbmcgZnJvbSB0aGUgYWRiIG9iamVjdHMKICAgICAgICAgKiBAcGFy YW0gIF92ZXJzaW9uYWRiX3ZlcnNpb25fdCBvYmplY3QKICAgICAgICAgKiBAcGFyYW0gZW52 IHBvaW50ZXIgdG8gZW52aXJvbm1lbnQgc3RydWN0CiAgICAgICAgICogQHJldHVybiBzZXJp YWxpemVkIHN0cmluZwogICAgICAgICAqLwogICAgICAgIAoKICAgICAgICAvKioKICAgICAg ICAgKiBTZXJpYWxpemUgdG8gYW4gWE1MIGZyb20gdGhlIGFkYiBvYmplY3RzCiAgICAgICAg ICogQHBhcmFtICBfdmVyc2lvbmFkYl92ZXJzaW9uX3Qgb2JqZWN0CiAgICAgICAgICogQHBh cmFtIGVudiBwb2ludGVyIHRvIGVudmlyb25tZW50IHN0cnVjdAogICAgICAgICAqIEBwYXJh bSB2ZXJzaW9uX29tX25vZGUgbm9kZSB0byBzZXJpYWxpemUgZnJvbQogICAgICAgICAqIEBw YXJhbSBoYXNfcGFyZW50IGlzIHRoZSBlbGVtZW50IGhhcyBhIHBhcmVudAogICAgICAgICAq IEBwYXJhbSB0YWdfY2xvc2VkIHdoZXRoZXIgdGhlIHBhcmVudCB0YWcgaXMgY2xvc2VkIG9y IG5vdAogICAgICAgICAqIEByZXR1cm4gQVhJUzJfU1VDQ0VTUyBvbiBzdWNjZXNzLCBlbHNl IEFYSVMyX0ZBSUxVUkUKICAgICAgICAgKi8KICAgICAgICBheGlvbV9ub2RlX3QqIEFYSVMy X0NBTEwKICAgICAgICBhZGJfdmVyc2lvbl9zZXJpYWxpemUoCiAgICAgICAgICAgIGFkYl92 ZXJzaW9uX3QqIF92ZXJzaW9uLAogICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVu diwKICAgICAgICAgICAgYXhpb21fbm9kZV90KiB2ZXJzaW9uX29tX25vZGUsIGludCBoYXNf cGFyZW50LCBpbnQgdGFnX2Nsb3NlZCk7CgoKICAgICAgICAKICAgICAgICAvKioKICAgICAg ICAgKiBHZXR0ZXIgZm9yIGlucHV0LgogICAgICAgICAqIEBwYXJhbSAgX3ZlcnNpb25hZGJf dmVyc2lvbl90IG9iamVjdAogICAgICAgICAqIEBwYXJhbSBlbnYgcG9pbnRlciB0byBlbnZp cm9ubWVudCBzdHJ1Y3QKICAgICAgICAgKiBAcmV0dXJuIGF4aXMyX2NoYXJfdCoKICAgICAg ICAgKi8KICAgICAgICBheGlzMl9jaGFyX3QqIEFYSVMyX0NBTEwKICAgICAgICBhZGJfdmVy c2lvbl9nZXRfaW5wdXQoCiAgICAgICAgICAgIGFkYl92ZXJzaW9uX3QqIF92ZXJzaW9uLAog ICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3QgKmVudik7CgogICAgICAgIC8qKgogICAg ICAgICAqIFNldHRlciBmb3IgaW5wdXQuCiAgICAgICAgICogQHBhcmFtICBfdmVyc2lvbmFk Yl92ZXJzaW9uX3Qgb2JqZWN0CiAgICAgICAgICogQHBhcmFtIGVudiBwb2ludGVyIHRvIGVu dmlyb25tZW50IHN0cnVjdAogICAgICAgICAqIEBwYXJhbSBwYXJhbV9pbnB1dCBheGlzMl9j aGFyX3QqCiAgICAgICAgICogQHJldHVybiBBWElTMl9TVUNDRVNTIG9uIHN1Y2Nlc3MsIGVs c2UgQVhJUzJfRkFJTFVSRQogICAgICAgICAqLwogICAgICAgIGF4aXMyX3N0YXR1c190IEFY SVMyX0NBTEwKICAgICAgICBhZGJfdmVyc2lvbl9zZXRfaW5wdXQoCiAgICAgICAgICAgIGFk Yl92ZXJzaW9uX3QqIF92ZXJzaW9uLAogICAgICAgICAgICBjb25zdCBheHV0aWxfZW52X3Qg KmVudiwKICAgICAgICAgICAgYXhpczJfY2hhcl90KiAgcGFyYW1faW5wdXQpOwoKICAgICAg ICAKCiAgICAgI2lmZGVmIF9fY3BsdXNwbHVzCiAgICAgfQogICAgICNlbmRpZgoKICAgICAj ZW5kaWYgLyogQURCX1ZFUlNJT05fSCAqLwogICAgCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABleGNlcHRpb25UZXN0L0V4Y2VwdGlvblRlc3RTZXJ2aWNlLndzZGwAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0 NAAwMDEyMDU0ADAwMTE2MTEAMDAwMDAwMTIyNTYAMTA3MjAyNjUzMzcAMDIxMTM2ACAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAc3V0 dGVyLW0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpcGV1c2VycwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp bmc9IlVURi04Ij8+Cjx3c2RsOmRlZmluaXRpb25zIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hl bWFzLnhtbHNvYXAub3JnL3dzZGwvIiB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxz b2FwLm9yZy93c2RsL21pbWUvIiB4bWxuczpuczA9Imh0dHA6Ly9hdWdlci5memsub3JnIiB4 bWxuczpzb2FwMTI9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcDEyLyIg eG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyIgeG1s bnM6bnMxPSJodHRwOi8vb3JnLmFwYWNoZS5heGlzMi94c2QiIHhtbG5zOndzYXc9Imh0dHA6 Ly93d3cudzMub3JnLzIwMDYvMDUvYWRkcmVzc2luZy93c2RsIiB4bWxuczp4cz0iaHR0cDov L3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFz LnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2F1Z2Vy LmZ6ay5vcmciPgogICAgPHdzZGw6dHlwZXM+CiAgICAgICAgPHhzOnNjaGVtYSB4bWxuczpu cz0iaHR0cDovL2F1Z2VyLmZ6ay5vcmciIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJxdWFsaWZp ZWQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0 dHA6Ly9hdWdlci5memsub3JnIj4KICAgICAgICAgICAgPCEtLSBmYXVsdCBlbGVtZW50IC0t PiAgICAgICAgICAKICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iTXlFeGNlcHRpb24i PgogICAgICAgICAgICAgIDx4czpjb21wbGV4VHlwZT4KICAgICAgICAgICAgICAgIDx4czpz ZXF1ZW5jZT4KICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBu YW1lPSJ0ZXh0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHM6c3RyaW5nIi8+CiAgICAgICAg ICAgICAgICA8L3hzOnNlcXVlbmNlPgogICAgICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+ CiAgICAgICAgICAgIDwveHM6ZWxlbWVudD4gCiAgICAgICAgICAgIAogICAgICAgICAgICAK ICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0idmVyc2lvbiI+CiAgICAgICAgICAgICAg ICA8eHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAgICAgICAgICAgPHhzOnNlcXVlbmNlPgog ICAgICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9 ImlucHV0IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHM6c3RyaW5nIi8+CiAgICAgICAgICAg ICAgICAgICAgPC94czpzZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDwveHM6Y29tcGxleFR5 cGU+CiAgICAgICAgICAgIDwveHM6ZWxlbWVudD4KICAgICAgICAgICAgPHhzOmVsZW1lbnQg bmFtZT0idmVyc2lvblJlc3BvbnNlIj4KICAgICAgICAgICAgICAgIDx4czpjb21wbGV4VHlw ZT4KICAgICAgICAgICAgICAgICAgICA8eHM6c2VxdWVuY2U+CiAgICAgICAgICAgICAgICAg ICAgICAgIDx4czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0icmV0dXJuIiBuaWxsYWJs ZT0idHJ1ZSIgdHlwZT0ieHM6c3RyaW5nIi8+CiAgICAgICAgICAgICAgICAgICAgPC94czpz ZXF1ZW5jZT4KICAgICAgICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+CiAgICAgICAgICAg IDwveHM6ZWxlbWVudD4KICAgICAgICA8L3hzOnNjaGVtYT4KICAgIDwvd3NkbDp0eXBlcz4K ICAgIDwhLS0gZmF1bHQgbWVzc2FnZSAtLT4KICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iTXlF eGNlcHRpb24iPgogICAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9 Im5zMDpNeUV4Y2VwdGlvbiIvPgogICAgPC93c2RsOm1lc3NhZ2U+IAogICAgPHdzZGw6bWVz c2FnZSBuYW1lPSJ2ZXJzaW9uUmVxdWVzdCI+CiAgICAgICAgPHdzZGw6cGFydCBuYW1lPSJw YXJhbWV0ZXJzIiBlbGVtZW50PSJuczA6dmVyc2lvbiIvPgogICAgPC93c2RsOm1lc3NhZ2U+ CiAgICA8d3NkbDptZXNzYWdlIG5hbWU9InZlcnNpb25SZXNwb25zZSI+CiAgICAgICAgPHdz ZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJuczA6dmVyc2lvblJlc3BvbnNl Ii8+CiAgICA8L3dzZGw6bWVzc2FnZT4gICAgCiAgICAKICAgIDx3c2RsOnBvcnRUeXBlIG5h bWU9IkV4Y2VwdGlvblRlc3RTZXJ2aWNlUG9ydFR5cGUiPgogICAgICAgIDx3c2RsOm9wZXJh dGlvbiBuYW1lPSJ2ZXJzaW9uIj4KICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0i bnMwOnZlcnNpb25SZXF1ZXN0IiB3c2F3OkFjdGlvbj0idXJuOnZlcnNpb24iLz4KICAgICAg ICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9Im5zMDp2ZXJzaW9uUmVzcG9uc2UiIHdzYXc6 QWN0aW9uPSJ1cm46dmVyc2lvblJlc3BvbnNlIi8+ICAKICAgICAgICAgICAgPCEtLSBmYXVs dCBtZXNzYWdlIC0tPgogICAgICAgICAgICA8d3NkbDpmYXVsdCBtZXNzYWdlPSJuczA6TXlF eGNlcHRpb24iIG5hbWU9Ik15RXhjZXB0aW9uIiB3c2F3OkFjdGlvbj0idXJuOnZlcnNpb25N eUV4Y2VwdGlvbiIvPgogICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CiAgICA8L3dzZGw6cG9y dFR5cGU+ICAgIAogICAgCiAgICA8d3NkbDpiaW5kaW5nIG5hbWU9IkV4Y2VwdGlvblRlc3RT ZXJ2aWNlU09BUDExQmluZGluZyIgdHlwZT0ibnMwOkV4Y2VwdGlvblRlc3RTZXJ2aWNlUG9y dFR5cGUiPgogICAgICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1h cy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIvPgogICAgICAgIDx3 c2RsOm9wZXJhdGlvbiBuYW1lPSJ2ZXJzaW9uIj4KICAgICAgICAgICAgPHNvYXA6b3BlcmF0 aW9uIHNvYXBBY3Rpb249InVybjp2ZXJzaW9uIiBzdHlsZT0iZG9jdW1lbnQiLz4KICAgICAg ICAgICAgPHdzZGw6aW5wdXQ+CiAgICAgICAgICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0 ZXJhbCIvPgogICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CiAgICAgICAgICAgIDx3c2RsOm91 dHB1dD4KICAgICAgICAgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CiAgICAg ICAgICAgIDwvd3NkbDpvdXRwdXQ+CiAgICAgICAgICAgIDwhLS1mYXVsdCBtZXNzYWdlIC0t PgogICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJNeUV4Y2VwdGlvbiI+CiAgICAgICAg ICAgICAgICA8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9Ik15RXhjZXB0aW9uIi8+ CiAgICAgICAgICAgIDwvd3NkbDpmYXVsdD4KICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgog ICAgPC93c2RsOmJpbmRpbmc+CiAgICAKICAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iRXhjZXB0 aW9uVGVzdFNlcnZpY2VTT0FQMTJCaW5kaW5nIiB0eXBlPSJuczA6RXhjZXB0aW9uVGVzdFNl cnZpY2VQb3J0VHlwZSI+CiAgICAgICAgPHNvYXAxMjpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0 cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0iZG9jdW1lbnQiLz4K ICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0idmVyc2lvbiI+CiAgICAgICAgICAgIDxz b2FwMTI6b3BlcmF0aW9uIHNvYXBBY3Rpb249InVybjp2ZXJzaW9uIiBzdHlsZT0iZG9jdW1l bnQiLz4KICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CiAgICAgICAgICAgICAgICA8c29hcDEy OmJvZHkgdXNlPSJsaXRlcmFsIi8+CiAgICAgICAgICAgIDwvd3NkbDppbnB1dD4KICAgICAg ICAgICAgPHdzZGw6b3V0cHV0PgogICAgICAgICAgICAgICAgPHNvYXAxMjpib2R5IHVzZT0i bGl0ZXJhbCIvPgogICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgogICAgICAgICAgICA8IS0t ZmF1bHQgbWVzc2FnZS0tPgogICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJNeUV4Y2Vw dGlvbiI+CiAgICAgICAgICAgICAgICA8c29hcDpmYXVsdCB1c2U9ImxpdGVyYWwiIG5hbWU9 Ik15RXhjZXB0aW9uIi8+CiAgICAgICAgICAgIDwvd3NkbDpmYXVsdD4KICAgICAgICA8L3dz ZGw6b3BlcmF0aW9uPgogICAgPC93c2RsOmJpbmRpbmc+CiAgICAKICAgIDx3c2RsOmJpbmRp bmcgbmFtZT0iRXhjZXB0aW9uVGVzdFNlcnZpY2VIdHRwQmluZGluZyIgdHlwZT0ibnMwOkV4 Y2VwdGlvblRlc3RTZXJ2aWNlUG9ydFR5cGUiPgogICAgICAgIDxodHRwOmJpbmRpbmcgdmVy Yj0iUE9TVCIvPgogICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJ2ZXJzaW9uIj4KICAg ICAgICAgICAgPGh0dHA6b3BlcmF0aW9uIGxvY2F0aW9uPSJFeGNlcHRpb25UZXN0U2Vydmlj ZS92ZXJzaW9uIi8+CiAgICAgICAgICAgIDx3c2RsOmlucHV0PgogICAgICAgICAgICAgICAg PG1pbWU6Y29udGVudCB0eXBlPSJ0ZXh0L3htbCIgcGFydD0idmVyc2lvbiIvPgogICAgICAg ICAgICA8L3dzZGw6aW5wdXQ+CiAgICAgICAgICAgIDx3c2RsOm91dHB1dD4KICAgICAgICAg ICAgICAgIDxtaW1lOmNvbnRlbnQgdHlwZT0idGV4dC94bWwiIHBhcnQ9InZlcnNpb24iLz4K ICAgICAgICAgICAgPC93c2RsOm91dHB1dD4KICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgog ICAgPC93c2RsOmJpbmRpbmc+CiAgICA8d3NkbDpzZXJ2aWNlIG5hbWU9IkV4Y2VwdGlvblRl c3RTZXJ2aWNlIj4KICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IkV4Y2VwdGlvblRlc3RTZXJ2 aWNlU09BUDExcG9ydF9odHRwIiBiaW5kaW5nPSJuczA6RXhjZXB0aW9uVGVzdFNlcnZpY2VT T0FQMTFCaW5kaW5nIj4KICAgICAgICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0 cDovL2xvY2FsaG9zdDo4MDgwL2F4aXMyL3NlcnZpY2VzL0V4Y2VwdGlvblRlc3RTZXJ2aWNl Ii8+CiAgICAgICAgPC93c2RsOnBvcnQ+CiAgICAgICAgPHdzZGw6cG9ydCBuYW1lPSJFeGNl cHRpb25UZXN0U2VydmljZVNPQVAxMnBvcnRfaHR0cCIgYmluZGluZz0ibnMwOkV4Y2VwdGlv blRlc3RTZXJ2aWNlU09BUDEyQmluZGluZyI+CiAgICAgICAgICAgIDxzb2FwMTI6YWRkcmVz cyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F4aXMyL3NlcnZpY2VzL0V4Y2Vw dGlvblRlc3RTZXJ2aWNlIi8+CiAgICAgICAgPC93c2RsOnBvcnQ+CiAgICAgICAgPHdzZGw6 cG9ydCBuYW1lPSJFeGNlcHRpb25UZXN0U2VydmljZUh0dHBwb3J0IiBiaW5kaW5nPSJuczA6 RXhjZXB0aW9uVGVzdFNlcnZpY2VIdHRwQmluZGluZyI+CiAgICAgICAgICAgIDxodHRwOmFk ZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9heGlzMi9zZXJ2aWNlcy9F eGNlcHRpb25UZXN0U2VydmljZSIvPgogICAgICAgIDwvd3NkbDpwb3J0PgogICAgPC93c2Rs OnNlcnZpY2U+Cjwvd3NkbDpkZWZpbml0aW9ucz4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABleGNlcHRpb25U ZXN0L3NlcnZpY2VzLnhtbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDEyMDU0ADAw MTE2MTEAMDAwMDAwMDA0MzIAMTA3MjAzMDE2MTEAMDE2NDQ0ACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAc3V0dGVyLW0AAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABpcGV1c2VycwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADwhLS0gVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBmcm9t IFdTREwgLS0+CjwhLS0gYnkgdGhlIEFwYWNoZSBBeGlzMiB2ZXJzaW9uOiBTTkFQU0hPVCAg QnVpbHQgb24gOiBPY3QgMDIsIDIwMDcgKDA4OjIzOjIwIEdNVCswMDowMCkgLS0+CjxzZXJ2 aWNlIG5hbWU9IkV4Y2VwdGlvblRlc3RTZXJ2aWNlIj4KPHBhcmFtZXRlciBuYW1lPSJTZXJ2 aWNlQ2xhc3MiPkV4Y2VwdGlvblRlc3RTZXJ2aWNlPC9wYXJhbWV0ZXI+CjxvcGVyYXRpb24g bmFtZT0idmVyc2lvbiIvPgo8L3NlcnZpY2U+CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA= --------------070401040808050503070608 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org For additional commands, e-mail: axis-c-user-help@ws.apache.org --------------070401040808050503070608--