binxie
2023-06-26 410599fdf4f96d7f19b51bc28e544fa4e8780a1e
force-app/main/default/classes/NewAndEditLeadController.cls
@@ -8,35 +8,39 @@
 * 
 * */
global without sharing class NewAndEditLeadController {
    public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;}
    public String awsToken{set;get;}
  public List<LayoutDescriberHelper.LayoutSection> layoutSections { get; set; }
  public String awsToken { get; set; }
    public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public static String sobjectTypeValue = 'Lead';
    public Boolean isNewMode{set;get;}
    public Boolean isCloneMode{protected set;get;}
  public Boolean isNewMode { get; set; }
  public Boolean isCloneMode { get; protected set; }
    public String rtTypeId {get; set;}
    public String AWSDataId{set;get;}
    public String AWSDataIdInquiryForm{set;get;}
    public String contactId{set;get;}//For Lookup field
    public List<String> encryptedAPIList{set;get;}
  public String AWSDataId { get; set; }
  public String AWSDataIdInquiryForm { get; set; }
  public String contactId { get; set; } //For Lookup field
  public List<String> encryptedAPIList { get; set; }
    public String staticResource {get; set;}
    public String staticResourceContact {get; set;}
    public String staticResourceInquiryForm{get; set;}
    public String requiredFieldAPIListStr {get; set;}
    public String fieldAPIToLabelMapStr {get; set;}
    public String Input_Required_Field_Msg{set;get;}
    public String PIPL_Name_Label{set;get;}
    public String PIPL_Input_Account_Error_Msg{set;get;}
    public String sobjectPrefix{set;get;}
    public String sobjecttypeForFrontEnd{set;get;}
    public String contactsInfo {set;get;}//key sfid;value awsid
  public String Input_Required_Field_Msg { get; set; }
  public String PIPL_Name_Label { get; set; }
  public String PIPL_Input_Account_Error_Msg { get; set; }
  public String sobjectPrefix { get; set; }
  public String sobjecttypeForFrontEnd { get; set; }
  public String contactsInfo { get; set; } //key sfid;value awsid
    public Inquiry_form__c ifc{get; private set;}
    public String contactDataId{get; set;}
    public String layoutSectionsStr {get; set;}
    public String isDecryptContact {get; set;}
    public final string ApiPrefix{get;private set;} //Add By Li Jun 20220403
    public Map<string,string> AWSToSobjectEncryptedMap{get;private set;}
    public string AWSToSobjectEncryptedMapJson{get{return JSON.serialize(AWSToSobjectEncryptedMap);}}
  public string AWSToSobjectEncryptedMapJson {
    get {
      return JSON.serialize(AWSToSobjectEncryptedMap);
    }
  }
    public String LeadCreatedDate { get; set; } // XLIU-CFE8M7 20220624 ssm
    public String VLookUpFieldsJson{get;private set;}
    //zhj MEBG新方案改造 2022-11-29 start
@@ -57,7 +61,13 @@
            isCloneMode = true;
        }
        //获取所有字段
        List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Lead').getDescribe().fields.getMap().keyset());
    List<String> fieldList = new List<String>(
      Schema.getGlobalDescribe()
        .get('Lead')
        .getDescribe()
        .fields.getMap()
        .keyset()
    );
        // Add fields to controller. This is to avoid the SOQL error in visualforce page
        if (!Test.isRunningTest()) { 
            controller.addFields(fieldList);
@@ -65,20 +75,60 @@
        SObject obj = controller.getRecord();    
        // XLIU-CFE8M7 20220624 ssm
        this.LeadCreatedDate = obj.get('CreatedDate') != null ? Date.newInstance(((Datetime)obj.get('CreatedDate')).year(), ((Datetime)obj.get('CreatedDate')).month(), ((Datetime)obj.get('CreatedDate')).day()).format() : Date.today().format();
    this.LeadCreatedDate = obj.get('CreatedDate') != null
      ? Date.newInstance(
            ((Datetime) obj.get('CreatedDate')).year(),
            ((Datetime) obj.get('CreatedDate')).month(),
            ((Datetime) obj.get('CreatedDate')).day()
          )
          .format()
      : Date.today().format();
        // this.LeadCreatedDate = Date.today().format();
        
        if(ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid') != null){
    if (
      ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid') !=
      null
    ) {
            System.debug('CF00N1000000962np_lkid');
            //产品咨询单过来的
            String InquiryFormId = ApexPages.currentPage().getParameters().get('CF00N1000000962np_lkid');
            ifc = [select Id,AWS_Data_Id__c,Contact_Name__c,Contact_Id__c,Hospital_Name__c,Hospital_ID__c,Department_Class__c,
            Department_ID__c,Opp_Name_Search__c,Opp_Name_Search_ID__c,Campaign__c,
            Campaign_ID__c,Name,Cancel_Reason__c,Phone__c,Email__c,Last_Name__c,LeadSource__c,Opportunity_Division__c,Request1__c,
            Urgent__c,Inquiry_Num__c,Product_Owner__c from Inquiry_form__c where id = :InquiryFormId];
      String InquiryFormId = ApexPages.currentPage()
        .getParameters()
        .get('CF00N1000000962np_lkid');
      ifc = [
        SELECT
          Id,
          AWS_Data_Id__c,
          Contact_Name__c,
          Contact_Id__c,
          Hospital_Name__c,
          Hospital_ID__c,
          Department_Class__c,
          Department_ID__c,
          Opp_Name_Search__c,
          Opp_Name_Search_ID__c,
          Campaign__c,
          Campaign_ID__c,
          Name,
          Cancel_Reason__c,
          Phone__c,
          Email__c,
          Last_Name__c,
          LeadSource__c,
          Opportunity_Division__c,
          Request1__c,
          Urgent__c,
          Inquiry_Num__c,
          Product_Owner__c
        FROM Inquiry_form__c
        WHERE id = :InquiryFormId
      ];
            System.debug('ifc = ' + ifc);
            if(ifc.Contact_Id__c !=null && ifc.Contact_Id__c != ''){
                Contact c = [select AWS_Data_Id__c from Contact where id = :ifc.Contact_Id__c];
        Contact c = [
          SELECT AWS_Data_Id__c
          FROM Contact
          WHERE id = :ifc.Contact_Id__c
        ];
                contactDataId = c.AWS_Data_Id__c;
            }
            AWSDataIdInquiryForm = ifc.AWS_Data_Id__c;
@@ -92,12 +142,24 @@
        }else if(obj.Id != null){
            //更新
            isNewMode = false;
            Lead leadData = [select Id,RecordTypeId,AWS_Data_Id__c,Contact_Name__r.Id,Contact_Name__r.AWS_Data_Id__c from Lead where id =: obj.Id];
      Lead leadData = [
        SELECT
          Id,
          RecordTypeId,
          AWS_Data_Id__c,
          Contact_Name__r.Id,
          Contact_Name__r.AWS_Data_Id__c
        FROM Lead
        WHERE id = :obj.Id
      ];
            rtTypeId = leadData.RecordTypeId;
            AWSDataId = leadData.AWS_Data_Id__c;
            Map<String,String> sfIdToAWSIdMap = new Map<String,String>();
            if(leadData.Contact_Name__r.Id != null){
                sfIdToAWSIdMap.put(String.valueof(leadData.Contact_Name__r.Id).subString(0,15),leadData.Contact_Name__r.AWS_Data_Id__c);
        sfIdToAWSIdMap.put(
          String.valueof(leadData.Contact_Name__r.Id).subString(0, 15),
          leadData.Contact_Name__r.AWS_Data_Id__c
        );
            }
            contactsInfo = JSON.serialize(sfIdToAWSIdMap);
        }else{
@@ -111,7 +173,9 @@
                isDecryptContact = '1';
                String contactId = mso.get('CF00N10000006ps6f_lkid');
                //查询AWS_Data_Id__c
                List<Contact> contactList = new List<Contact>([select AWS_Data_Id__c from Contact where id=:contactId]);
        List<Contact> contactList = new List<Contact>(
          [SELECT AWS_Data_Id__c FROM Contact WHERE id = :contactId]
        );
                Contact c = new Contact();
                if(contactList!=null&&contactList.size()>0){
                    c = contactList[0];
@@ -120,23 +184,39 @@
                    contactDataId = c.AWS_Data_Id__c;
                }
                //查询战略科室分类
                List<Contact> cs = [select Account.Department_Class__c from Contact where id=:contactId];
        List<Contact> cs = [
          SELECT Account.Department_Class__c
          FROM Contact
          WHERE id = :contactId
        ];
                if(cs.size()>0){
                    controller.getRecord().put('Department_Class__c',cs[0].Account.Department_Class__c);
          controller.getRecord()
            .put('Department_Class__c', cs[0].Account.Department_Class__c);
                }
                controller.getRecord().put('Contact_Name__c',mso.get('CF00N10000006ps6f_lkid'));
        controller.getRecord()
          .put('Contact_Name__c', mso.get('CF00N10000006ps6f_lkid'));
            }
            //医院名
            if(mso.containsKey('CF00N10000002CvC5_lkid')){
                controller.getRecord().put('Hospital_Name__c',mso.get('CF00N10000002CvC5_lkid'));
        controller.getRecord()
          .put('Hospital_Name__c', mso.get('CF00N10000002CvC5_lkid'));
                //通过医院id查询战略科室分类
                String hospitalId = mso.get('CF00N10000002CvC5_lkid');
                List<Account> hospitalAccount = [select Department_Class__c from Account where Id=:hospitalId];
        List<Account> hospitalAccount = [
          SELECT Department_Class__c
          FROM Account
          WHERE Id = :hospitalId
        ];
                if(hospitalAccount.size()>0){
                    List<Account> departmentAccount = [select Id from Account where Id=:hospitalAccount[0].Department_Class__c];
          List<Account> departmentAccount = [
            SELECT Id
            FROM Account
            WHERE Id = :hospitalAccount[0].Department_Class__c
          ];
                    if (departmentAccount.size()>0) {
                        System.debug('Department_Class__c = ' + departmentAccount[0].Id);
                        controller.getRecord().put('Department_Class__c',departmentAccount[0].Id);
            controller.getRecord()
              .put('Department_Class__c', departmentAccount[0].Id);
                    }
                }
            }
@@ -153,42 +233,60 @@
                controller.getRecord().put('LeadSource', mso.get('LeadSource'));
            }
            if (mso.containsKey(System.Label.Opportunity_stage)) {
                controller.getRecord().put('Opportunity_stage__c', mso.get(System.Label.Opportunity_stage));
        controller.getRecord()
          .put('Opportunity_stage__c', mso.get(System.Label.Opportunity_stage));
            }
            //20220505 lt 注释掉
            // if (mso.containsKey('00N10000006qOF0')) {
            //     controller.getRecord().put('Close_Forecasted_Date__c', Date.parse(mso.get('00N10000006qOF0')));
            // }
            if (mso.containsKey(System.Label.Opp_Name)) {
                controller.getRecord().put('Opp_Name__c', mso.get(System.Label.Opp_Name));
        controller.getRecord()
          .put('Opp_Name__c', mso.get(System.Label.Opp_Name));
            }
            // if (mso.containsKey('00N100000048UBf')) {
            //     controller.getRecord().put('Contact__c', mso.get('00N100000048UBf'));
            // }
            if (mso.containsKey(System.Label.Purchase_Reason)) {
                controller.getRecord().put('Purchase_Reason__c', mso.get(System.Label.Purchase_Reason));
        controller.getRecord()
          .put('Purchase_Reason__c', mso.get(System.Label.Purchase_Reason));
            }
            if (mso.containsKey(System.Label.Fund_Basis)) {
                controller.getRecord().put('Fund_Basis__c', mso.get(System.Label.Fund_Basis));
        controller.getRecord()
          .put('Fund_Basis__c', mso.get(System.Label.Fund_Basis));
            }
            if (mso.containsKey(System.Label.Purchase_Type)) {
                controller.getRecord().put('Purchase_Type__c', mso.get(System.Label.Purchase_Type));
        controller.getRecord()
          .put('Purchase_Type__c', mso.get(System.Label.Purchase_Type));
            }
            //20220427 
            if (mso.containsKey(System.Label.Tender_information)) { //招标项目Id
                controller.getRecord().put('Tender_information__c', mso.get(System.Label.Tender_information));
      if (mso.containsKey(System.Label.Tender_information)) {
        //招标项目Id
        controller.getRecord()
          .put(
            'Tender_information__c',
            mso.get(System.Label.Tender_information)
          );
            }
            if (mso.containsKey(System.Label.Agency_Opportunity)) { //经销商询价Id
                controller.getRecord().put('Agency_Opportunity__c', mso.get(System.Label.Agency_Opportunity));
      if (mso.containsKey(System.Label.Agency_Opportunity)) {
        //经销商询价Id
        controller.getRecord()
          .put(
            'Agency_Opportunity__c',
            mso.get(System.Label.Agency_Opportunity)
          );
            }
            if (mso.containsKey(System.Label.Sales_Method)) { //经销商询价--招标方式
                controller.getRecord().put('Sales_Method__c', mso.get(System.Label.Sales_Method));
      if (mso.containsKey(System.Label.Sales_Method)) {
        //经销商询价--招标方式
        controller.getRecord()
          .put('Sales_Method__c', mso.get(System.Label.Sales_Method));
            }
            if (mso.containsKey(System.Label.Request)) {
                controller.getRecord().put('Request__c', mso.get(System.Label.Request));
            }
            if (mso.containsKey(System.Label.Request_Detail)) { 
                controller.getRecord().put('Request_Detail__c', mso.get(System.Label.Request_Detail));
        controller.getRecord()
          .put('Request_Detail__c', mso.get(System.Label.Request_Detail));
            }
            // 2022-04-13 来源 jz end 0414 lt
            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
@@ -200,16 +298,26 @@
            obj.put('OwnerId',UserInfo.getUserId());
        }
        system.debug('RecordTypeId:'+rtTypeId);
        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Lead','classic');
    LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(
      rtTypeId,
      'Lead',
      'classic'
    );
        layoutSections = LayoutWrapperValue.layoutSections;
        List<String> requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList;
        Map<String,String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap;
        requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList);
        fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap);
        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Lead');
    PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo(
      'Lead'
    );
        staticResource = JSON.serialize(piIntegration);
        staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
        staticResourceInquiryForm = JSON.serialize(PIHelper.getPIIntegrationInfo('Inquiry_form__c'));
    staticResourceContact = JSON.serialize(
      PIHelper.getPIIntegrationInfo('Contact')
    );
    staticResourceInquiryForm = JSON.serialize(
      PIHelper.getPIIntegrationInfo('Inquiry_form__c')
    );
        //zhj MEBG新方案改造 2022-11-29 start
        staticResourceV2 = JSON.serialize(PIHelper.getPIIntegrationInfo('LeadV2'));
        //zhj MEBG新方案改造 2022-11-29 end
@@ -218,7 +326,10 @@
        layoutSectionsStr = JSON.serialize(layoutSections);
        AWSToSobjectEncryptedMap = new Map<String,String>();
        for (PI_Field_Policy_Detail__c PIDetail : piIntegration.PIDetails) {
            AWSToSobjectEncryptedMap.put(PIDetail.AWS_Field_API__c, PIDetail.SF_Field_API_Name__c);
      AWSToSobjectEncryptedMap.put(
        PIDetail.AWS_Field_API__c,
        PIDetail.SF_Field_API_Name__c
      );
        }
        //获取lookup字段
        List<String> VLookUpFields = new List<String>();
@@ -233,18 +344,25 @@
    }
    global class Response{
        public String recordId{set;get;}
        public String message{set;get;}
        public String status{set;get;}
    public String recordId { get; set; }
    public String message { get; set; }
    public String status { get; set; }
    }
    @RemoteAction
    global static Response saveLead(String leadJson,String transId,Boolean isNew) {
  global static Response saveLead(
    String leadJson,
    String transId,
    Boolean isNew
  ) {
        System.debug('Lead Info:' + JSON.serialize(leadJson));
        //1. Prepare the payload for  Lead
        Schema.SObjectType leadSchema = schemaMap.get(sobjectTypeValue);
        Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe().fields.getMap();
        Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(leadJson);
    Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe()
      .fields.getMap();
    Map<String, Object> fieldValueMap = (Map<String, Object>) JSON.deserializeUntyped(
      leadJson
    );
        Lead leadInfo = new Lead();
        String status = 'success';    
        Response resp = new Response();
@@ -259,11 +377,20 @@
                if(!fieldAPIToTypeMap.containskey(fieldAPI)){
                    continue;
                }
                Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType();
        Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI)
          .getDescribe()
          .getType();
                String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI)); 
                system.debug('Field Type:'+fielddataType+' field Value='+fieldValue);
        system.debug(
          'Field Type:' + fielddataType + ' field Value=' + fieldValue
        );
                if(String.valueOf(fielddataType)=='DATE'){
                    leadInfo.put(fieldAPI,(String.isBlank(fieldValue)||String.isEmpty(fieldValue))? null:Date.valueOf(fieldValue.replace('/', '-')));
          leadInfo.put(
            fieldAPI,
            (String.isBlank(fieldValue) || String.isEmpty(fieldValue))
              ? null
              : Date.valueOf(fieldValue.replace('/', '-'))
          );
                }else if(String.valueOf(fielddataType)=='DATETIME'){
                    if(String.isNotBlank(fieldValue)&&fieldValue.contains('T')){
                        fieldValue = fieldValue.replace('T',' ');
@@ -271,8 +398,18 @@
                    }else{
                        leadInfo.put(fieldAPI, null);
                    }                    
                }else if(String.valueof(fielddataType)=='CURRENCY'|| String.valueof(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
                    leadInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?null:Decimal.valueOf(fieldValue.replace(',', '')));
        } else if (
          String.valueof(fielddataType) == 'CURRENCY' ||
          String.valueof(fielddataType) == 'PERCENT' ||
          String.valueOf(fielddataType) == 'Number' ||
          String.valueOf(fielddataType) == 'DOUBLE'
        ) {
          leadInfo.put(
            fieldAPI,
            (String.isBlank(fieldValue) || String.isEmpty(fieldValue))
              ? null
              : Decimal.valueOf(fieldValue.replace(',', ''))
          );
                } else if(String.valueof(fielddataType)=='BOOLEAN'){
                    leadInfo.put(fieldAPI, fieldValueMap.get(fieldAPI));
                }else {
@@ -282,11 +419,10 @@
            
            //2. Save Record Process
        
            System.debug('abcde');
            awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
            System.debug('awsDataId = ' + awsDataId);
            Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId];
      Lead[] leads = [SELECT id FROM Lead WHERE AWS_Data_Id__c = :awsDataId];
            
            if(!isNew){
                isClone = leads.size() == 0;
@@ -294,7 +430,11 @@
            System.debug('isClone---------'+isClone);
            //2022-6-10 yjk SWAG-CEY8GZ start
            if(leadInfo.Hospital_Name__c != null){
                Account acc = [select id,Hospital__c from Account where id= :leadInfo.Hospital_Name__c];
        Account acc = [
          SELECT id, Hospital__c
          FROM Account
          WHERE id = :leadInfo.Hospital_Name__c
        ];
                leadInfo.hospital__c = acc.Hospital__c;
            }
            //2022-6-10 yjk SWAG-CEY8GZ end
@@ -315,13 +455,20 @@
                }
            }
            rid=leadInfo.Id;
            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson ,status,'');
      PIHelper.saveTransLog(
        sobjectTypeValue,
        (String) leadInfo.get('AWS_Data_Id__c'),
        rid,
        transId,
        leadJson,
        status,
        ''
      );
            resp.recordId = leadInfo.Id;
            resp.message = '';
            resp.status = status;
            System.debug('resp from sfdx back-end' + resp);
            return resp;
        } catch(DmlException e) {
            Integer index = 0;
            System.debug(e.getNumDml());
@@ -338,14 +485,29 @@
            Database.rollback(sp);
            resp.status = 'Exception';
            resp.message ='保存失败,原因:'+ e.getDmlMessage(index);
            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId, leadJson ,status,e.getMessage()+e.getStackTraceString());
      PIHelper.saveTransLog(
        sobjectTypeValue,
        (String) leadInfo.get('AWS_Data_Id__c'),
        rid,
        transId,
        leadJson,
        status,
        e.getMessage() + e.getStackTraceString()
      );
            return resp;
        } catch(Exception e) {
            System.debug('into catch'+e.getMessage());
            Database.rollback(sp);
            status = 'fail';
            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson,status,e.getMessage());
      PIHelper.saveTransLog(
        sobjectTypeValue,
        (String) leadInfo.get('AWS_Data_Id__c'),
        rid,
        transId,
        leadJson,
        status,
        e.getMessage()
      );
            resp.message = e.getMessage();            
            resp.status = status;
            return resp;
@@ -372,7 +534,6 @@
            account.put('Id','000000000000000');
        }
        
        Map<String, Map<String, String>> m = new Map<String, Map<String, String>>();
        
        System.debug('account='+account);
@@ -384,7 +545,9 @@
                    acc.put('Id','000000000000000');
                    acc.put('Name','Name');
                }else{
                    acc = Database.query('select Id,Name from Account where id=\''+account.get(t)+'\'');
          acc = Database.query(
            'select Id,Name from Account where id=\'' + account.get(t) + '\''
          );
                }
                Map<String, String> n = new Map<String, String>();
                n.put('Id', (String)acc.get('Id'));
@@ -408,757 +571,7 @@
    public static Integer ControllerUtil() {
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        return i;}
    return i;
  }
}