1. Definição do problema

1.1. Introdução

Conforme análise descritiva realizada (https://rpubs.com/Fagner1/1264472), as tabelas estão organizadas por faixas de valores, e, teoricamente, com comissão fixa (existem algumas negociações diferenciadas). As comissões médias apuradas apontam que, dado o custo de produção, não são sufuicientes em volume e comissão para gerar MCu positivo (mais de 30% das propostas geram prejuízo).

1.2. Definição

Encontrar uma forma que permita obter o valor da comissão mínima, disponbilizando os contratos em grupos de tabelas (conforme valores).

A pergunta a ser respondida é: Como explicar a relação entre ‘comissão mínima’ e ‘valor do contrato’ de uma forma que a operação não dê prejuízo.

1.3. Considerações

Para se obter o valor da comissão mínima (%), teremos sempre que executar a função custos / valor contrato, e a relação entre estas duas variáveis será sempre explicada por uma função exponencial: quanto maior o valor do contrato, menor a comissão (percentual) a ser cobrada.

fórmula: Cmin(p) = Custo/V

Onde:

custo = custo por proposta

V = valor da proposta

p = proposta

Cmin = comissão mínima

Por exemplo:

Atualmente, a política de comissão é: uma taxa fixa, e definida por intervalos de valores (tabelas).

ex: tabela normal

Contudo, isso compromete a performance do comissionamento, bem como a precificação dos contratos. Com taxas fixas estaremos sempre cobrando menos do que deveríamos de um lado, e mais do que deveríamos do outro.

A relação, na verdade deveria seguir a seguinte lógica: quanto maior o valor da emissão, menor deve ser o comissionamento cobrado.

Em resumo, não é possível evitar prejuízos nas propostas de menor valor estabelendo uma taxa fixa de comissão.

E, o que é possível fazer caso seja necessário criar tabelas e garantir que tenha o mesmo desempenho?

Vamos criar um modelo pensando em usar o volume e a diferença no valor da comissão gerada em propostas maiores.

2. Solução

2.1. Considerações

O primeiro passo é definir em quais faixas de valores precisariam ser recalculadas.

Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
Please use `all_of()` or `any_of()` instead.
# Was:
data %>% select(diference_col)

# Now:
data %>% select(all_of(diference_col))

See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.

O gráfico acima representa o resultado final das comissões recebidas considerando o volume, por faixa de valores dos contratos.

Conclui-se que, em todas as faixas de valores, caso haja proposta negativa, o valor será compensado pelo volume de outra faixa.

A taxa que se equipara ao comissionamento mínimo de todas as propostas é de 5,23%. Observe, contudo, que estamos conseguindo praticar o comissionamento percentual superior.

O total recebido é bem maior (já que o percentual de comissão cobrado é superior ao mínimo). Um exemplo de como se comportariam os valores com comissionamento mínimo, e de como está sendo praticado o comissionamento atualmente.

Com o percentual reajustado, percebe-se que passamos a ficar lucrativos a partir dos R$ 110,00. Mas, na forma da política atual de comissionamento, estamos lucrativos em todas as propostas.

3. Tabelas

Para determinar as novas tabelas, é possível fazer um ‘gabarito’.

Se agrupados de acordo com a comissão mínima necessária, podemos criar 4 tabelas para valores na faixa de R$ 25,00 a R$ 400,00.

Temos, ao menos, 4 grupos na faixa de valor até R$ 400,00.

Agora, vamos comparar a comissão percentual de cada faixa com a comissão mínima, para saber se alguma mudança será necessária.

Grupos Min Max CMS(%) média recebida CMS mínima(%) Total de comissão na proposta (%) Teto repasse (%)
3 25.00 44.90 15.53 10.11 36.21 26.10
1 44.91 80.39 11.72 5.49 27.89 22.40
4 80.40 140.57 11.89 3.34 28.75 25.41
2 140.58 435.07 15.95 1.69 32.25 30.56

As faixas de valores dos grupos 2 e 4 precisam de revisão na comissão. Para isso, filtraremos todos os parceiros que nos retornem taxa média de comissão menor do que o indicado na respectiva faixa.

Por fim, como saber se o parceiro merece uma negociação especial?

O volume é um fator secundário, primeiro, deve-se observar a característica da produção. Como regra, deve ser igual ou acima dos padrões abaixo:

Grupos Média Range
2 35.63 34.45 a 36.81
4 68.03 66.87 a 69.19
1 107.83 106.67 a 108.99
3 208.64 207.3 a 209.98

4. Conclusão

Observa-se que, em todas as faixas de valores estamos recebendo comissionamento bem acima do mínimo necessário para cobrir os custos considerados neste estudo (emissão, formalização, averbação e comissão de comercial).

Desta forma, nenhuma medida de urgência é recomendada para evitar prejuízos. Contudo, visando sempre melhorar a rentabilidade das propostas, recomenda-se:

I - Analisar os comerciais que estão com o comissionamento abaixo da média;

II - A segmentação dos parceiros, definindo-se um padrão para negociação de comissões fora da média praticada.

LS0tDQp0aXRsZTogIkFncnVwYW1lbnRvIGRlIHByb3Bvc3RhcyINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB0cnVlDQotLS0NCg0KDQojIyAxLiBEZWZpbmnDp8OjbyBkbyBwcm9ibGVtYQ0KDQojIyMgMS4xLiBJbnRyb2R1w6fDo28NCg0KQ29uZm9ybWUgYW7DoWxpc2UgZGVzY3JpdGl2YSByZWFsaXphZGEgKGh0dHBzOi8vcnB1YnMuY29tL0ZhZ25lcjEvMTI2NDQ3MiksIGFzIHRhYmVsYXMgZXN0w6NvIG9yZ2FuaXphZGFzIHBvciBmYWl4YXMgZGUgdmFsb3JlcywgZSwgdGVvcmljYW1lbnRlLCBjb20gY29taXNzw6NvIGZpeGEgKGV4aXN0ZW0gYWxndW1hcyBuZWdvY2lhw6fDtWVzIGRpZmVyZW5jaWFkYXMpLiBBcyBjb21pc3PDtWVzIG3DqWRpYXMgYXB1cmFkYXMgYXBvbnRhbSBxdWUsIGRhZG8gbyBjdXN0byBkZSBwcm9kdcOnw6NvLCBuw6NvIHPDo28gc3VmdWljaWVudGVzIGVtIHZvbHVtZSBlIGNvbWlzc8OjbyBwYXJhIGdlcmFyIE1DdSBwb3NpdGl2byAobWFpcyBkZSAzMCUgZGFzIHByb3Bvc3RhcyBnZXJhbSBwcmVqdcOtem8pLg0KDQojIyMgMS4yLiBEZWZpbmnDp8Ojbw0KDQpFbmNvbnRyYXIgdW1hIGZvcm1hIHF1ZSBwZXJtaXRhIG9idGVyIG8gdmFsb3IgZGEgY29taXNzw6NvIG3DrW5pbWEsIGRpc3BvbmJpbGl6YW5kbyBvcyBjb250cmF0b3MgZW0gZ3J1cG9zIGRlIHRhYmVsYXMgKGNvbmZvcm1lIHZhbG9yZXMpLg0KDQpBIHBlcmd1bnRhIGEgc2VyIHJlc3BvbmRpZGEgw6k6ICoqQ29tbyBleHBsaWNhciBhIHJlbGHDp8OjbyBlbnRyZSAnY29taXNzw6NvIG3DrW5pbWEnIGUgJ3ZhbG9yIGRvIGNvbnRyYXRvJyBkZSB1bWEgZm9ybWEgcXVlIGEgb3BlcmHDp8OjbyBuw6NvIGTDqiBwcmVqdcOtem8qKi4NCg0KDQojIyMgMS4zLiBDb25zaWRlcmHDp8O1ZXMNCg0KUGFyYSBzZSBvYnRlciBvIHZhbG9yIGRhIGNvbWlzc8OjbyBtw61uaW1hICglKSwgdGVyZW1vcyBzZW1wcmUgcXVlIGV4ZWN1dGFyIGEgZnVuw6fDo28gKmN1c3RvcyAvIHZhbG9yIGNvbnRyYXRvKiwgZSBhIHJlbGHDp8OjbyBlbnRyZSBlc3RhcyBkdWFzIHZhcmnDoXZlaXMgc2Vyw6Egc2VtcHJlIGV4cGxpY2FkYSBwb3IgdW1hIGZ1bsOnw6NvIGV4cG9uZW5jaWFsOiAgKnF1YW50byBtYWlvciBvIHZhbG9yIGRvIGNvbnRyYXRvLCBtZW5vciBhIGNvbWlzc8OjbyAocGVyY2VudHVhbCkgYSBzZXIgY29icmFkYS4qDQoNCg0KZsOzcm11bGE6IENtaW4ocCkgPSBDdXN0by9WDQoNCk9uZGU6IA0KDQpjdXN0byA9IGN1c3RvIHBvciBwcm9wb3N0YQ0KDQpWID0gdmFsb3IgZGEgcHJvcG9zdGENCg0KcCA9IHByb3Bvc3RhDQoNCkNtaW4gPSBjb21pc3PDo28gbcOtbmltYQ0KDQpQb3IgZXhlbXBsbzoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCnggPC0gMy41NQ0KeSA8LSBzZXEoNTAsIDQwMCwgMSkNCnogPC0gMy41NSAvIHkNCg0KcGxvdCh5LCB6LCBtYWluID0gJ1JlbGFjaW9uYW1lbnRvIGVudHJlIGNvbWlzc8OjbyBlIHZhbG9yIGNvbnRyYXRvJywgeWxhYiA9ICdDb21pc3PDo28gKCUpJywgeGxhYiA9ICdWYWxvciBjb250cmF0bycpDQoNCmBgYA0KDQpBdHVhbG1lbnRlLCBhIHBvbMOtdGljYSBkZSBjb21pc3PDo28gw6k6IHVtYSB0YXhhIGZpeGEsIGUgZGVmaW5pZGEgcG9yIGludGVydmFsb3MgZGUgdmFsb3JlcyAodGFiZWxhcykuDQoNCmV4OiB0YWJlbGEgbm9ybWFsDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KDQplbWlzc2FvIDwtIHNlcSgxMDAsIDQwMCwgMSkgIA0KZGVzcGVzYXMgPC0gICAzLjU1DQpwZXJjZW50dWFsX2NvbWlzc2FvIDwtIDAuMDMNCnZhbG9yX2NvbWlzc2FvIDwtIHBlcmNlbnR1YWxfY29taXNzYW8gKiBlbWlzc2FvDQpkaWZlcmVuY2FfZGVzcGVzYXNfY29taXNzYW8gPC0gZGVzcGVzYXMgLyB2YWxvcl9jb21pc3Nhbw0KcGxvdChlbWlzc2FvLCB2YWxvcl9jb21pc3NhbywgbWFpbiA9ICdWYWxvciBkZSBjb21pc3PDo28gKFIkKSBnZXJhZG8gY29tIHBlcmNlbnR1YWwgZml4byBkZSAzJScsIHlsYWIgPSAnVmFsb3IgQ29taXNzw6NvIChSJCknLCB4bGFiID0gJ1ZhbG9yIEVtaXNzw6NvIChSJCknKQ0KDQoNCmBgYA0KDQpDb250dWRvLCBpc3NvIGNvbXByb21ldGUgYSBwZXJmb3JtYW5jZSBkbyBjb21pc3Npb25hbWVudG8sIGJlbSBjb21vIGEgcHJlY2lmaWNhw6fDo28gZG9zIGNvbnRyYXRvcy4gQ29tIHRheGFzIGZpeGFzIGVzdGFyZW1vcyBzZW1wcmUgY29icmFuZG8gbWVub3MgZG8gcXVlIGRldmVyw61hbW9zIGRlIHVtIGxhZG8sIGUgbWFpcyBkbyBxdWUgZGV2ZXLDrWFtb3MgZG8gb3V0cm8uDQoNCkEgcmVsYcOnw6NvLCBuYSB2ZXJkYWRlIGRldmVyaWEgc2VndWlyIGEgc2VndWludGUgbMOzZ2ljYTogcXVhbnRvIG1haW9yIG8gdmFsb3IgZGEgZW1pc3PDo28sIG1lbm9yIGRldmUgc2VyIG8gY29taXNzaW9uYW1lbnRvIGNvYnJhZG8uDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KcGxvdChlbWlzc2FvLCBkaWZlcmVuY2FfZGVzcGVzYXNfY29taXNzYW8sDQogICAgIG1haW4gPSAiUmVsYcOnw6NvIGVudHJlIGVtaXNzw6NvIChSJCkgZSBjb21pc3Npb25hbWVudG8gKCUpIiwNCiAgICAgeWxhYiAgPSAnQ29taXNzw6NvICglKScsIHhsYWIgPSAnVmFsb3IgRW1pc3PDo28gKFIkJykNCg0KYGBgDQoNCg0KRW0gcmVzdW1vLCBuw6NvIMOpIHBvc3PDrXZlbCBldml0YXIgcHJlanXDrXpvcyBuYXMgcHJvcG9zdGFzIGRlIG1lbm9yIHZhbG9yIGVzdGFiZWxlbmRvIHVtYSB0YXhhIGZpeGEgZGUgY29taXNzw6NvLg0KDQpFLCBvIHF1ZSDDqSBwb3Nzw612ZWwgZmF6ZXIgY2FzbyBzZWphIG5lY2Vzc8OhcmlvIGNyaWFyIHRhYmVsYXMgZSBnYXJhbnRpciBxdWUgdGVuaGEgbyBtZXNtbyBkZXNlbXBlbmhvPw0KDQpWYW1vcyBjcmlhciB1bSBtb2RlbG8gcGVuc2FuZG8gZW0gdXNhciBvIHZvbHVtZSBlIGEgZGlmZXJlbsOnYSBubyB2YWxvciBkYSBjb21pc3PDo28gZ2VyYWRhIGVtIHByb3Bvc3RhcyBtYWlvcmVzLg0KDQojIyAyLiBTb2x1w6fDo28NCg0KIyMjIDIuMS4gQ29uc2lkZXJhw6fDtWVzDQoNCk8gcHJpbWVpcm8gcGFzc28gw6kgZGVmaW5pciBlbSBxdWFpcyBmYWl4YXMgZGUgdmFsb3JlcyBwcmVjaXNhcmlhbSBzZXIgcmVjYWxjdWxhZGFzLiANCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCnNob3dfY3Vtc3VtX2RpZmVyZW5jZXMoZGFkb3Nfc2VtX291dGxpZXJzLCBkaWZlcmVuY2VfY29sID0gJ2RpZmVyZW5jYScpDQoNCmBgYA0KDQoNCk8gZ3LDoWZpY28gYWNpbWEgcmVwcmVzZW50YSBvIHJlc3VsdGFkbyBmaW5hbCBkYXMgY29taXNzw7VlcyByZWNlYmlkYXMgY29uc2lkZXJhbmRvIG8gdm9sdW1lLCBwb3IgZmFpeGEgZGUgdmFsb3JlcyBkb3MgY29udHJhdG9zLiANCg0KQ29uY2x1aS1zZSBxdWUsIGVtIHRvZGFzIGFzIGZhaXhhcyBkZSB2YWxvcmVzLCBjYXNvIGhhamEgcHJvcG9zdGEgbmVnYXRpdmEsIG8gdmFsb3Igc2Vyw6EgY29tcGVuc2FkbyBwZWxvIHZvbHVtZSBkZSBvdXRyYSBmYWl4YS4NCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmRhZG9zX3BhcmFfY2FsY3VsbyA8LSBkYXRhX2NsdXN0ZXIgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChWYWxvckJhc2UsIGRpZmVyZW5jYSwgY29taXNzYW9fdjgsIGNvbWlzc2FvX3ZhbG9yZXNfbWluaW1vcykgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihWYWxvckJhc2UgPD0gMTY2KQ0KdGF4YV9pZGVhbCA8LSBlbmNvbnRyYXJfdGF4YV9pZGVhbCgNCiAgZGFkb3NfcGFyYV9jYWxjdWxvLCANCiAgc2VxKDAuMDAxLCAwLjIwLCBieSA9IDAuMDAwMSkNCikNCg0KZGFkb3NfcGFyYV9jYWxjdWxvJGNvbWlzc2FvX3JlY2FsY3VsYWRhIDwtIHJvdW5kKHRheGFfaWRlYWwgKiBkYWRvc19wYXJhX2NhbGN1bG8kVmFsb3JCYXNlLCAyKQ0KDQpkYWRvc19wYXJhX2NhbGN1bG8kbm92YV9kaWZlcmVuY2EgPC0gZGFkb3NfcGFyYV9jYWxjdWxvJGNvbWlzc2FvX3JlY2FsY3VsYWRhIC0gZGFkb3NfcGFyYV9jYWxjdWxvJGNvbWlzc2FvX3ZhbG9yZXNfbWluaW1vcw0KDQpkYWRvc19wYXJhX2NhbGN1bG8gJT4lDQogIHN1bW1hcmlzZSgNCiAgICB0b3RhbF9yZWNhbGN1bGFkYSA9IHN1bShjb21pc3Nhb19yZWNhbGN1bGFkYSkvMTAwMDAwMCwNCiAgICB0b3RhbF9taW5pbW8gPSBzdW0oY29taXNzYW9fdmFsb3Jlc19taW5pbW9zKS8xMDAwMDAwLA0KICAgIHRvdGFsX3JlY2ViaWRvID0gc3VtKGNvbWlzc2FvX3Y4KS8xMDAwMDAwDQogICkgJT4lIGdhdGhlcihrZXkgPSAndG90YWlzJywgdmFsdWUgPSAndmFsb3JlcycsDQogICAgICAgICAgICAgICAjdG90YWxfcmVjYWxjdWxhZGEsDQogICAgICAgICAgICAgICB0b3RhbF9taW5pbW8sDQogICAgICAgICAgICAgICB0b3RhbF9yZWNlYmlkbykgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhbG9yZXMsIHggPSB0b3RhaXMsIGZpbGwgPSB0b3RhaXMpKSArIGdlb21fYmFyKHN0YXQgPSAnaWRlbnRpdHknLCBhbHBoYSA9IC43KSArDQogIGxhYnModGl0bGUgPSAnVG90YWlzIGRlIHZhbG9yZXMgbcOtbmltb3MgeCB2YWxvcmVzIHJlY2ViaWRvcycsDQogICAgICAgc3VidGl0bGUgPSAnZGUgUiQgMjUsMDAgYXTDqSBSJCAxNjYsMDAnLA0KICAgICAgIHkgPSAnVmFsb3JlcyBlbSBtaWxow6NvJywgeCA9ICdUb3RhaXMnKSArDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfbGVnZW5kKHRpdGxlID0gIkxlZ2VuZGEiKSkgKw0KICBzY2FsZV9maWxsX2h1ZShsYWJlbHMgPSBjKCJUb3RhbCBtw61uaW1vIiwgIlRvdGFsIHJlY2ViaWRvIikpDQoNCmBgYA0KDQpBIHRheGEgcXVlIHNlIGVxdWlwYXJhIGFvIGNvbWlzc2lvbmFtZW50byBtw61uaW1vIGRlIHRvZGFzIGFzIHByb3Bvc3RhcyDDqSBkZSA1LDIzJS4gT2JzZXJ2ZSwgY29udHVkbywgcXVlIGVzdGFtb3MgY29uc2VndWluZG8gcHJhdGljYXIgbyBjb21pc3Npb25hbWVudG8gcGVyY2VudHVhbCBzdXBlcmlvci4NCg0KTyB0b3RhbCByZWNlYmlkbyDDqSBiZW0gbWFpb3IgKGrDoSBxdWUgbyBwZXJjZW50dWFsIGRlIGNvbWlzc8OjbyBjb2JyYWRvIMOpIHN1cGVyaW9yIGFvIG3DrW5pbW8pLiBVbSBleGVtcGxvIGRlIGNvbW8gc2UgY29tcG9ydGFyaWFtIG9zIHZhbG9yZXMgY29tIGNvbWlzc2lvbmFtZW50byBtw61uaW1vLCBlIGRlIGNvbW8gZXN0w6Egc2VuZG8gcHJhdGljYWRvIG8gY29taXNzaW9uYW1lbnRvIGF0dWFsbWVudGUuDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCmdyYWZpY29fMSA8LSBzaG93X2N1bXN1bV9kaWZlcmVuY2VzKGRhZG9zX3BhcmFfY2FsY3VsbywgZGlmZXJlbmNlX2NvbCA9ICdkaWZlcmVuY2EnKQ0KDQpncmFmaWNvXzIgPC0gc2hvd19jdW1zdW1fZGlmZXJlbmNlcyhkYWRvc19wYXJhX2NhbGN1bG8sIGRpZmVyZW5jZV9jb2wgPSAnbm92YV9kaWZlcmVuY2EnKQ0KDQpncmlkRXh0cmE6OmdyaWQuYXJyYW5nZShncmFmaWNvXzEsIGdyYWZpY29fMikNCg0KYGBgDQoNCkNvbSBvIHBlcmNlbnR1YWwgcmVhanVzdGFkbywgcGVyY2ViZS1zZSBxdWUgcGFzc2Ftb3MgYSBmaWNhciBsdWNyYXRpdm9zIGEgcGFydGlyIGRvcyBSXCQgMTEwLDAwLiBNYXMsIG5hIGZvcm1hIGRhIHBvbMOtdGljYSBhdHVhbCBkZSBjb21pc3Npb25hbWVudG8sIGVzdGFtb3MgbHVjcmF0aXZvcyBlbSB0b2RhcyBhcyBwcm9wb3N0YXMuDQoNCg0KDQojIyAzLiBUYWJlbGFzDQoNClBhcmEgZGV0ZXJtaW5hciBhcyBub3ZhcyB0YWJlbGFzLCDDqSBwb3Nzw612ZWwgZmF6ZXIgdW0gJ2dhYmFyaXRvJy4NCg0KU2UgYWdydXBhZG9zIGRlIGFjb3JkbyBjb20gYSBjb21pc3PDo28gbcOtbmltYSBuZWNlc3PDoXJpYSwgcG9kZW1vcyBjcmlhciA0IHRhYmVsYXMgcGFyYSB2YWxvcmVzIG5hIGZhaXhhIGRlIFJcJCAyNSwwMCBhIFJcJCA0MDAsMDAuDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCmdncGxvdChkYXRhID0gc2FtcGxlX24oZGF0YV9jbHVzdGVyLCAxNTAwMCksIGFlcyh4ID0gVmFsb3JCYXNlLCB5ID0gY29taXNzYW9fcGVyY2VudHVhbF9taW5pbWEsIGNvbG9yID0gYXMuZmFjdG9yKGNsdXN0ZXJzKSkpICsgDQogIGdlb21fcG9pbnQoYWxwaGEgPSAuNykgKw0KICBsYWJzKHRpdGxlID0gJ0FncnVwYW1lbnRvIGRlIHRhYmVsYXMgcG9yIGNvbWlzc8OjbycsIHggPSAiVmFsb3IgZG8gY29udHJhdG8iLCB5ID0gIlBlcmNlbnR1YWwgZGUgY29taXNzw6NvIG3DrW5pbWEiKSArDQogIGd1aWRlcyhjb2xvciA9IGd1aWRlX2xlZ2VuZCh0aXRsZSA9ICdHcnVwb3MnKSkgKyAgDQogIHNjYWxlX2NvbG9yX2h1ZShsYWJlbHMgPSBjKA0KICAgIA0KICAgIHBhc3RlKCdSJCAnLCBkYXRhX2NsdXN0ZXIgJT4lIGZpbHRlcihjbHVzdGVycyA9PSAxKSAlPiUgc2VsZWN0KFZhbG9yQmFzZSkgJT4lIG1pbigpLCAnIMOgIFIkICcsIGRhdGFfY2x1c3RlciAlPiUgZmlsdGVyKGNsdXN0ZXJzID09IDEpICU+JSBzZWxlY3QoVmFsb3JCYXNlKSAlPiUgbWF4KCkpLA0KICAgIA0KICAgIHBhc3RlKCdSJCAnLCBkYXRhX2NsdXN0ZXIgJT4lIGZpbHRlcihjbHVzdGVycyA9PSAyKSAlPiUgc2VsZWN0KFZhbG9yQmFzZSkgJT4lIG1pbigpLCAnIMOgIFIkICcsIGRhdGFfY2x1c3RlciAlPiUgZmlsdGVyKGNsdXN0ZXJzID09IDIpICU+JSBzZWxlY3QoVmFsb3JCYXNlKSAlPiUgbWF4KCkpLA0KICAgIA0KICAgIHBhc3RlKCdSJCAnLCBkYXRhX2NsdXN0ZXIgJT4lIGZpbHRlcihjbHVzdGVycyA9PSAzKSAlPiUgc2VsZWN0KFZhbG9yQmFzZSkgJT4lIG1pbigpLCAnIMOgIFIkICcsIGRhdGFfY2x1c3RlciAlPiUgZmlsdGVyKGNsdXN0ZXJzID09IDMpICU+JSBzZWxlY3QoVmFsb3JCYXNlKSAlPiUgbWF4KCkpLA0KICAgIA0KICAgIHBhc3RlKCdSJCAnLCBkYXRhX2NsdXN0ZXIgJT4lIGZpbHRlcihjbHVzdGVycyA9PSA0KSAlPiUgc2VsZWN0KFZhbG9yQmFzZSkgJT4lIG1pbigpLCAnIMOgIFIkICcsIGRhdGFfY2x1c3RlciAlPiUgZmlsdGVyKGNsdXN0ZXJzID09IDQpICU+JSBzZWxlY3QoVmFsb3JCYXNlKSAlPiUgbWF4KCkpDQogICAgDQogICkpDQoNCg0KYGBgDQoNCg0KDQpUZW1vcywgYW8gbWVub3MsIDQgZ3J1cG9zIG5hIGZhaXhhIGRlIHZhbG9yIGF0w6kgUlwkIDQwMCwwMC4NCg0KQWdvcmEsIHZhbW9zIGNvbXBhcmFyIGEgY29taXNzw6NvIHBlcmNlbnR1YWwgZGUgY2FkYSBmYWl4YSBjb20gYSBjb21pc3PDo28gbcOtbmltYSwgcGFyYSBzYWJlciBzZSBhbGd1bWEgbXVkYW7Dp2Egc2Vyw6EgbmVjZXNzw6FyaWEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KDQpsaXN0X3Jlc3VsdF9jbHVzdGVyIDwtIGxpc3QoKQ0KDQpmb3IgKGNsdXN0ZXIgaW4gdW5pcXVlKGRhdGFfY2x1c3RlciRjbHVzdGVycykpIHsNCiAgDQogICAgICANCiAgICAgIGRhZG9zX3BhcmFfY2FsY3VsbyA8LSBkYXRhX2NsdXN0ZXIgJT4lIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChWYWxvckJhc2UsIGRpZmVyZW5jYSwgY29taXNzYW9fdjgsIGNvbWlzc2FvX3ZhbG9yZXNfbWluaW1vcywgY2x1c3RlcnMpICU+JSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoY2x1c3RlcnMgPT0gY2x1c3RlcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgIA0KICAgICAgdGF4YV9pZGVhbCA8LSBlbmNvbnRyYXJfdGF4YV9pZGVhbCgNCiAgICAgICAgZGFkb3NfcGFyYV9jYWxjdWxvLCANCiAgICAgICAgc2VxKDAuMDAxLCAwLjIwLCBieSA9IDAuMDAwMSkNCiAgICAgICkNCg0KICBsaXN0X3Jlc3VsdF9jbHVzdGVyW1tjbHVzdGVyXV0gPC0gcm91bmQodGF4YV9pZGVhbCoxMDAsIDIpDQogIA0KDQp9DQoNCg0KbGlzdF90YXggPC0gZGF0YS5mcmFtZShDTVNfbWVkaWFfZGV2aWRhID0gZG8uY2FsbChyYmluZCwgbGlzdF9yZXN1bHRfY2x1c3RlciksDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJzID0gYygxLCAyLCAzLCA0KSkNCg0KDQpgYGANCg0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KDQp0YWJlbGFzIDwtIGRhdGFfY2x1c3RlciAlPiUNCiAgZ3JvdXBfYnkoY2x1c3RlcnMpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgbWluID0gbWluKFZhbG9yQmFzZSksDQogICAgbWF4ID0gbWF4KFZhbG9yQmFzZSksDQogICAgbWVkaWFfY21zX3JlY2ViaWRhID0gcm91bmQobWVhbihDTVNfdjgpLCAyKSwNCiAgICB0b3RhbF9wZXJjZW50ID0gcm91bmQobWVhbihQZXJjZW50dWFsQ01TKSwgMikNCiAgICApICU+JSANCiAgbWVyZ2UobGlzdF90YXgsIGJ5ID0gJ2NsdXN0ZXJzJykgJT4lIGFycmFuZ2UobWluKQ0KDQoNCnRhYmVsYXMkdGV0byA8LSB0YWJlbGFzJHRvdGFsX3BlcmNlbnQgLSB0YWJlbGFzJENNU19tZWRpYV9kZXZpZGENCg0KY29sbmFtZXModGFiZWxhcykgPC0gYygiR3J1cG9zIiwgIk1pbiIsICJNYXgiLCAnQ01TKCUpIG3DqWRpYSByZWNlYmlkYScsICJUb3RhbCBkZSBjb21pc3PDo28gbmEgcHJvcG9zdGEgKCUpIiwgIkNNUyBtw61uaW1hKCUpIiwgIlRldG8gcmVwYXNzZSAoJSkiKQ0KDQp0YWJlbGFzIDwtIHRhYmVsYXNbLCBjKCJHcnVwb3MiLCAiTWluIiwgIk1heCIsICdDTVMoJSkgbcOpZGlhIHJlY2ViaWRhJywgIkNNUyBtw61uaW1hKCUpIiwgIlRvdGFsIGRlIGNvbWlzc8OjbyBuYSBwcm9wb3N0YSAoJSkiLCAiVGV0byByZXBhc3NlICglKSIpXQ0KDQp0YWJlbGFzICU+JSBrbml0cjo6a2FibGUoKQ0KDQpgYGANCg0KDQpBcyBmYWl4YXMgZGUgdmFsb3JlcyBkb3MgZ3J1cG9zIDIgZSA0IHByZWNpc2FtIGRlIHJldmlzw6NvIG5hIGNvbWlzc8Ojby4gUGFyYSBpc3NvLCBmaWx0cmFyZW1vcyB0b2RvcyBvcyBwYXJjZWlyb3MgcXVlIG5vcyByZXRvcm5lbSB0YXhhIG3DqWRpYSBkZSBjb21pc3PDo28gbWVub3IgZG8gcXVlIG8gaW5kaWNhZG8gbmEgcmVzcGVjdGl2YSBmYWl4YS4NCg0KUG9yIGZpbSwgY29tbyBzYWJlciBzZSBvIHBhcmNlaXJvIG1lcmVjZSB1bWEgbmVnb2NpYcOnw6NvIGVzcGVjaWFsPw0KDQpPIHZvbHVtZSDDqSB1bSBmYXRvciBzZWN1bmTDoXJpbywgcHJpbWVpcm8sIGRldmUtc2Ugb2JzZXJ2YXIgYSBjYXJhY3RlcsOtc3RpY2EgZGEgcHJvZHXDp8Ojby4gQ29tbyByZWdyYSwgZGV2ZSBzZXIgaWd1YWwgb3UgYWNpbWEgZG9zIHBhZHLDtWVzIGFiYWl4bzoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCmVzdGF0aXN0aWNhcyA8LSBkYXRhX2NsdXN0ZXIgJT4lDQogIGdyb3VwX2J5KGNsdXN0ZXJzKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIG1lZGlhID0gcm91bmQoZXhwKG1lYW4obG9nKFZhbG9yQmFzZSkpKSwgMiksDQogICAgcmFuZ2UgPSBwYXN0ZShyb3VuZChtZWRpYSAtIGV4cChzZChsb2coVmFsb3JCYXNlKSkpLCAyKSwgIiBhICIsIHJvdW5kKG1lZGlhICsgZXhwKHNkKGxvZyhWYWxvckJhc2UpKSksIDIpKQ0KICAgICkgJT4lIGFycmFuZ2UobWVkaWEpDQoNCmNvbG5hbWVzKGVzdGF0aXN0aWNhcykgPC0gYygiR3J1cG9zIiwgIk3DqWRpYSIsICJSYW5nZSIpDQoNCmVzdGF0aXN0aWNhcyAlPiUga25pdHI6OmthYmxlKCkNCg0KYGBgDQoNCg0KIyMgNC4gQ29uY2x1c8Ojbw0KDQpPYnNlcnZhLXNlIHF1ZSwgZW0gdG9kYXMgYXMgZmFpeGFzIGRlIHZhbG9yZXMgZXN0YW1vcyByZWNlYmVuZG8gY29taXNzaW9uYW1lbnRvIGJlbSBhY2ltYSBkbyBtw61uaW1vIG5lY2Vzc8OhcmlvIHBhcmEgY29icmlyIG9zIGN1c3RvcyBjb25zaWRlcmFkb3MgbmVzdGUgZXN0dWRvIChlbWlzc8OjbywgZm9ybWFsaXphw6fDo28sIGF2ZXJiYcOnw6NvIGUgY29taXNzw6NvIGRlIGNvbWVyY2lhbCkuDQoNCkRlc3RhIGZvcm1hLCBuZW5odW1hIG1lZGlkYSBkZSB1cmfDqm5jaWEgw6kgcmVjb21lbmRhZGEgcGFyYSBldml0YXIgcHJlanXDrXpvcy4gQ29udHVkbywgdmlzYW5kbyBzZW1wcmUgbWVsaG9yYXIgYSByZW50YWJpbGlkYWRlIGRhcyBwcm9wb3N0YXMsIHJlY29tZW5kYS1zZToNCg0KSSAtIEFuYWxpc2FyIG9zIGNvbWVyY2lhaXMgcXVlIGVzdMOjbyBjb20gbyBjb21pc3Npb25hbWVudG8gYWJhaXhvIGRhIG3DqWRpYTsNCg0KSUkgLSBBIHNlZ21lbnRhw6fDo28gZG9zIHBhcmNlaXJvcywgZGVmaW5pbmRvLXNlIHVtIHBhZHLDo28gcGFyYSBuZWdvY2lhw6fDo28gZGUgY29taXNzw7VlcyBmb3JhIGRhIG3DqWRpYSBwcmF0aWNhZGEuDQoNCg==