Introduction
One of the real challenges in building any type of framework, core or application is making it possible for the developers to hook into the business logic at specific points. Since PHP is not event based, nor it works with interrupts you have to come up an alternative.
The test case
Lets assume we are the main developers of a webshop framework. Programmers can use our framework to build complete webshops. Programmers can manage the orders that are placed on the webshop with the order class. The order class is part of our framework and we don’t want it to be extended by any programmer. However we don’t want to limit to programmers in their possibilities to hook into the orders process.
For example programmers should be able to send an email to the webshopowner if an order changes from one specific delivery status to another. This functionality is not part of the default behavior in our framework and is custom for the progammers webshop implementation.
Like said before, PHP doesn’t provide interrupts or real events so we need to come up with another way to implement hooks into our application. Lets take a look at the observer pattern.
Implementing the Observer pattern
The observer pattern is a design-pattern that describes a way for objects to be notified to specific state-changes in objects of the application.
For the first implementation we can use SPL. The SPL provides in two simple objects:
SPLSubject
- attach (new observer to attach)
- detach (existing observer to detach)
- notify (notify all observers)
SPLObserver
- update (Called from the subject (i.e. when it’s value has changed).
iOrderRef = $iOrderRef;
// Get order information from the database or an other resources
$this->iStatus = Order::STATUS_SHIPPED;
}
/**
* Attach an observer
*
* @param SplObserver $oObserver
* @return void
*/
public function attach(SplObserver $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (isset($this->aObservers[$sHash])) {
throw new Exception('Observer is already attached');
}
$this->aObservers[$sHash] = $oObserver;
}
/**
* Detach observer
*
* @param SplObserver $oObserver
* @return void
*/
public function detach(SplObserver $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (!isset($this->aObservers[$sHash])) {
throw new Exception('Observer not attached');
}
unset($this->aObservers[$sHash]);
}
/**
* Notify the attached observers
*
* @param string $sEvent, name of the event
* @param mixed $mData, optional data that is not directly available for the observers
* @return void
*/
public function notify()
{
foreach ($this->aObservers as $oObserver) {
try {
$oObserver->update($this);
} catch(Exception $e) {
}
}
}
/**
* Add an order
*
* @param array $aOrder
* @return void
*/
public function delete()
{
$this->notify();
}
/**
* Return the order reference number
*
* @return int
*/
public function getRef()
{
return $this->iOrderRef;
}
/**
* Return the current order status
*
* @return int
*/
public function getStatus()
{
return $this->iStatus;
}
/**
* Update the order status
*/
public function updateStatus($iStatus)
{
$this->notify();
// ...
$this->iStatus = $iStatus;
// ...
$this->notify();
}
}
/**
* Order status handler, observer that sends an email to secretary
* if the status of an order changes from shipped to delivered, so the
* secratary can make a phone call to our customer to ask for his opinion about the service
*
* @package Shop
*/
class OrderStatusHandler implements SplObserver
{
/**
* Previous orderstatus
* @var int
*/
protected $iPreviousOrderStatus;
/**
* Current orderstatus
* @var int
*/
protected $iCurrentOrderStatus;
/**
* Update, called by the observable object order
*
* @param Observable_Interface $oSubject
* @param string $sEvent
* @param mixed $mData
* @return void
*/
public function update(SplSubject $oSubject)
{
if(!$oSubject instanceof Order) {
return;
}
if(is_null($this->iPreviousOrderStatus)) {
$this->iPreviousOrderStatus = $oSubject->getStatus();
} else {
$this->iCurrentOrderStatus = $oSubject->getStatus();
if($this->iPreviousOrderStatus === Order::STATUS_SHIPPED && $this->iCurrentOrderStatus === Order::STATUS_DELIVERED) {
$sSubject = sprintf('Order number %d is shipped', $oSubject->getRef());
//mail('secratary@example.com', 'Order number %d is shipped', 'Text');
echo 'Mail sended to the secratary to help her remember to call our customer for a survey.';
}
}
}
}
$oOrder = new Order(26012011);
$oOrder->attach(new OrderStatusHandler());
$oOrder->updateStatus(Order::STATUS_DELIVERED);
$oOrder->delete();
?>
There are several problems with the implementation above. To most important disadvantage is that we have only one update method in our observer. In this update method we don’t know when and why we are getting notified, just that something happened. We should keep track of everything that happens in the subject. (Or use debug_backtrace… just joking, don’t even think about using it that way ever!).
Taking it a step further, events
Lets take a look at the next example, we will extend the Observer implementation with some an additional parameter for the eventname that occured.
Finishing up, optional data
iOrderRef = $iOrderRef;
// Get order information from the database or something else...
$this->iStatus = Order::STATUS_SHIPPED;
}
/**
* Attach an observer
*
* @param Observer_Interface $oObserver
* @return void
*/
public function attachObserver(Observer_Interface $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (isset($this->aObservers[$sHash])) {
throw new Exception('Observer is already attached');
}
$this->aObservers[$sHash] = $oObserver;
}
/**
* Detach observer
*
* @param Observer_Interface $oObserver
* @return void
*/
public function detachObserver(Observer_Interface $oObserver)
{
$sHash = spl_object_hash($oObserver);
if (!isset($this->aObservers[$sHash])) {
throw new Exception('Observer not attached');
}
unset($this->aObservers[$sHash]);
}
/**
* Notify the attached observers
*
* @param string $sEvent, name of the event
* @param mixed $mData, optional data that is not directly available for the observers
* @return void
*/
public function notifyObserver($sEvent, $mData=null)
{
foreach ($this->aObservers as $oObserver) {
try {
$oObserver->update($this, $sEvent, $mData);
} catch(Exception $e) {
}
}
}
/**
* Add an order
*
* @param array $aOrder
* @return void
*/
public function add($aOrder = array())
{
$this->notifyObserver('onAdd');
}
/**
* Return the order reference number
*
* @return int
*/
public function getRef()
{
return $this->iOrderRef;
}
/**
* Return the current order status
*
* @return int
*/
public function getStatus()
{
return $this->iStatus;
}
/**
* Update the order status
*/
public function updateStatus($iStatus)
{
$this->notifyObserver('onBeforeUpdateStatus');
// ...
$this->iStatus = $iStatus;
// ...
$this->notifyObserver('onAfterUpdateStatus');
}
}
/**
* Order status handler, observer that sends an email to secretary
* if the status of an order changes from shipped to delivered, so the
* secratary can make a phone call to our customer to ask for his opinion about the service
*
* @package Shop
*/
class OrderStatusHandler implements Observer_Interface
{
protected $iPreviousOrderStatus;
protected $iCurrentOrderStatus;
/**
* Update, called by the observable object order
*
* @param Observable_Interface $oObservable
* @param string $sEvent
* @param mixed $mData
* @return void
*/
public function update(Observable_Interface $oObservable, $sEvent, $mData=null)
{
if(!$oObservable instanceof Order) {
return;
}
switch($sEvent) {
case 'onBeforeUpdateStatus':
$this->iPreviousOrderStatus = $oObservable->getStatus();
return;
case 'onAfterUpdateStatus':
$this->iCurrentOrderStatus = $oObservable->getStatus();
if($this->iPreviousOrderStatus === Order::STATUS_SHIPPED && $this->iCurrentOrderStatus === Order::STATUS_DELIVERED) {
$sSubject = sprintf('Order number %d is shipped', $oObservable->getRef());
//mail('secratary@example.com', 'Order number %d is shipped', 'Text');
echo 'Mail sended to the secratary to help her remember to call our customer for a survey.';
}
}
}
}
$oOrder = new Order(26012011);
$oOrder->attachObserver(new OrderStatusHandler());
$oOrder->updateStatus(Order::STATUS_DELIVERED);
$oOrder->add();
?>
Now we are able to take action on different events that occur.
Disadvantages
Although this implementation works quite well there are some drawbacks. One of those drawbacks is that we need to dispatch an event in our framework, if we don’t programmers can’t hook into our application. Triggering events everywhere give us a small performance penalty however I do think this way of working gives the programmers a nice way to hook into your application on those spots that you want them to hook in.
Just for the record
Notice that this code is just an example and can still use some improvements, for example: each observer is initialized even it will maybe never be notified, therefore I suggest to make use of lazy in some cases for loading the objects. There are other systems to hook into an application, more to follow!
ΠΡΠ΅Π·Π΄ Π²ΡΠ°ΡΠ°-Π½Π°ΡΠΊΠΎΠ»ΠΎΠ³Π° ΠΈΠ· ΠΊΠ»ΠΈΠ½ΠΈΠΊΠΈ Β«Π’ΡΠ΅Π·Π²ΠΎΠΡΠΎΡΠΈΒ» Π½Π° Π΄ΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΡΠΎΠΊ, Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΈ ΠΏΡΠ°Π·Π΄Π½ΠΈΠΊΠΈ. ΠΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ Π΄Π΅ΡΠΎΠΊΡΠΈΠΊΠ°ΡΠΈΠΈ Π²ΡΠ°Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡ ΠΎΡΠΌΠΎΡΡ, ΠΈΠ·ΠΌΠ΅ΡΡΠ΅Ρ Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡΠ°ΡΡΠΎΡΡ ΠΏΡΠ»ΡΡΠ°, ΡΡΠΎΠ²Π΅Π½Ρ ΠΊΠΈΡΠ»ΠΎΡΠΎΠ΄Π° Π² ΠΊΡΠΎΠ²ΠΈ ΠΈ ΠΏΠΎΠ΄Π±ΠΈΡΠ°Π΅Ρ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ ΡΡ Π΅ΠΌΡ Π»Π΅ΡΠ΅Π½ΠΈΡ. Π‘Π°ΠΌΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΎΡ 1 Π΄ΠΎ 2 ΡΠ°ΡΠΎΠ² ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄ ΡΡΡΠΎΠ³ΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ Π²ΡΠ°ΡΠ°.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ – http://
ΠΠΎΠΊΡΠΏΠΊΠ° Π΄ΠΈΠΏΠ»ΠΎΠΌΠΎΠ² ΠΠ£ΠΠΎΠ² Π² ΠΠΎΡΠΊΠ²Π΅ β Ρ ΠΏΠ΅ΡΠ°ΡΡΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°ΡΡ ΠΈΠ²Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ).
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΡ Π΄Π°Π΅ΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ.
– ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ
– ΠΠΎΡΡΠ°Π²ΠΊΠ° 3β7 Π΄Π½Π΅ΠΉ
– ΠΡΠ±Π°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ
Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 2117 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ»ΡΠ³ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
ΠΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ β ΠΎΡΠ²Π΅ΡΠΈΠΌ Π±ΡΡΡΡΠΎ, Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
goobet
goobet
Π§Π΅ΠΌ Π΄ΠΎΠ»ΡΡΠ΅ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π·Π°ΠΏΠΎΡ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠΊΡΠΈΠ½Ρ Π² ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΌΠ΅, ΡΡΠΎ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . ΠΡΠΊΠ°Π· ΠΎΡ Π°Π»ΠΊΠΎΠ³ΠΎΠ»Ρ Π±Π΅Π· Π΄ΠΎΠ»ΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ:
Π Π°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π»ΡΡΡΠ΅ – Π·Π°ΠΏΠΎΠΉ Π½Π°ΡΠΊΠΎΠ»ΠΎΠ³ Π½Π° Π΄ΠΎΠΌ ΠΊΡΠ°ΡΠ½ΠΎΠ΄Π°Ρ
goobet
Π·Π°ΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΡΠ΅ΡΠ°Ρ ΡΠ΅Π½Π° Π·Π°ΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΡΠ΅ΡΠ°Ρ Π½Π΅Π΄ΠΎΡΠΎΠ³ΠΎ
ΠΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠΏΠ»ΠΎΠΌΠΎΠ² ΠΠ£ΠΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΉ Π ΠΎΡΡΠΈΠΈ ΠΈ Π‘ΠΠ β Ρ ΠΏΠ΅ΡΠ°ΡΡΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°ΡΡ ΠΈΠ²Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ).
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ.
– ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ
– ΠΠΎΡΡΠ°Π²ΠΊΠ° 3β7 Π΄Π½Π΅ΠΉ
– ΠΡΠ±Π°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ
Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 2180 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ»ΡΠ³ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
ΠΡΠΏΠΈΡΡ Π΄ΠΈΠΏΠ»ΠΎΠΌ Π½Π΅Π΄ΠΎΡΠΎΠ³ΠΎ β ΠΎΡΠ²Π΅ΡΠΈΠΌ Π±ΡΡΡΡΠΎ, Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΠ°ΡΠΊΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΡΠΈΠ΅Π·Π΄Π° Π²ΡΠ°ΡΠ° Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 30-60 ΠΌΠΈΠ½ΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π°Π²Π»Π΅Π½ΠΈΡ, ΠΏΡΠ»ΡΡΠ° ΠΈ ΡΡΠΎΠ²Π½Ρ ΠΊΠΈΡΠ»ΠΎΡΠΎΠ΄Π° Π² ΠΊΡΠΎΠ²ΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΡ ΠΎΡΠ΅Π½ΠΊΡ ΡΡΠΆΠ΅ΡΡΠΈ ΠΈΠ½ΡΠΎΠΊΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ°Ρ ΠΏΠΎΠ΄Π±ΠΈΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠΎΡΡΠ°Π² Π»Π΅ΠΊΠ°ΡΡΡΠ² Π΄Π»Ρ Π΄Π΅ΡΠΎΠΊΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠ°ΠΏΠ΅Π»ΡΠ½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡΠΈΡΠ°Π΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΌ ΠΎΡ ΡΠΎΠΊΡΠΈΠ½ΠΎΠ², Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ΄Π½ΠΎ-ΡΠΎΠ»Π΅Π²ΠΎΠΉ Π±Π°Π»Π°Π½Ρ ΠΈ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΎΠ².
ΠΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ – Π½Π°ΡΠΊΠΎΠ»ΠΎΠ³ Π½Π° Π΄ΠΎΠΌ ΠΊΠ»ΠΈΠ½ΠΈΠΊΠ° ΡΠΎΡΠΈ
goobet
This supportive online community helps people dealing with addiction and mental health challenges.
Explore further – online support for alcoholism
goobet
goobet
goobet
Discover a non-judgmental environment to talk about relapse, recovery, and starting over.
Find out more – how to help a loved one with addiction
ΠΊΡΠ΅Π΄ΠΈΡ ΠΏΠΎΠ΄ Π·Π°Π»ΠΎΠ³ ΠΏΡΡ
infoavtolombard-pts65.ru/kemerovo.html
ΠΊΡΠ΅Π΄ΠΈΡ ΠΏΠΎΠ΄ Π·Π°Π»ΠΎΠ³ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ ΠΊΠ΅ΠΌΠ΅ΡΠΎΠ²ΠΎ
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΊΠ»ΠΈΠ½ΠΈΠΊΠΈ β ΡΡΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΎΠ΅ Π»Π΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΡ ΠΎΡΠ΅ΡΠ°ΠΏΠΈΡ ΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π°Π±ΠΈΠ»ΠΈΡΠ°ΡΠΈΡ. ΠΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π½ΠΎ ΠΈ ΠΏΡΠΈΡ ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΠΊΠΎΠ³Π½ΠΈΡΠΈΠ²Π½ΠΎ-ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΡΠ°ΠΏΠΈΠΈ, ΡΠ΅ΠΌΠ΅ΠΉΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΠΈ ΠΈ Π³ΡΡΠΏΠΏΠΎΠ²ΡΠ΅ Π·Π°Π½ΡΡΠΈΡ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°ΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, Π½ΠΎ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ Π΅Ρ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌΠΈ ΠΈ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΠΏΡΠΈΡ ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΡΠΌΠΈ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΡΡΡ – https://Π±ΡΡΡΡΠΎ-Π²ΡΠ²ΠΎΠ΄-ΠΈΠ·-Π·Π°ΠΏΠΎΡ.ΡΡ/vyvod-iz-zapoya-cena-v-volgograde.xn--p1ai/
AntiNarcoForum β ΡΠΎΡΡΠΌ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ , ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΡ. ΠΠ΄Π΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ Π»Π΅ΡΠ΅Π½ΠΈΡ, ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΈΡΡΠΎΡΠΈΠΈ Π²ΡΠ·Π΄ΠΎΡΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ – ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ΅Π°Π±ΠΈΠ»ΠΈΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ΅Π½ΡΡ Π΄Π»Ρ Π½Π°ΡΠΊΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΡ
ΠΠΎΠΊΡΠΏΠΊΠ° Π΄ΠΈΠΏΠ»ΠΎΠΌΠΎΠ² ΠΠ£ΠΠΎΠ² Π² ΠΠΎΡΠΊΠ²Π΅ β Ρ ΠΏΠ΅ΡΠ°ΡΡΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°ΡΡ ΠΈΠ²Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ).
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ.
– ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ
– ΠΠΎΡΡΠ°Π²ΠΊΠ° 3β7 Π΄Π½Π΅ΠΉ
– ΠΡΠ±Π°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ
Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 3050 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ»ΡΠ³ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
[url=http://inforepetitor2.ru/]ΠΡΠΏΠΈΡΡ Π΄ΠΈΠΏΠ»ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΡΠ°[/url] β ΠΎΡΠ²Π΅ΡΠΈΠΌ Π±ΡΡΡΡΠΎ, Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠΏΠ»ΠΎΠΌΠΎΠ² ΠΠ£ΠΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΉ Π ΠΎΡΡΠΈΠΈ ΠΈ Π‘ΠΠ β Ρ ΠΏΠ΅ΡΠ°ΡΡΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°ΡΡ ΠΈΠ²Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ).
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΡ Π΄Π°Π΅ΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ.
– ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ
– ΠΠΎΡΡΠ°Π²ΠΊΠ° 3β7 Π΄Π½Π΅ΠΉ
– ΠΡΠ±Π°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ
Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 4253 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ»ΡΠ³ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
[url=http://inforepetitor3.ru/]ΠΡΠΏΠΈΡΡ Π΄ΠΈΠΏΠ»ΠΎΠΌ Π²ΡΠ·Π°[/url] β ΠΎΡΠ²Π΅ΡΠΈΠΌ Π±ΡΡΡΡΠΎ, Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΠΎΠ³Π΄Π° Π·Π°ΠΏΠΎΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΡ ΡΠ΄ΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ. Π Π’ΡΠΌΠ΅Π½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΡΠ»ΡΠ³Π° ΠΊΠ°ΠΏΠ΅Π»ΡΠ½ΠΈΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ· Π·Π°ΠΏΠΎΡ Π½Π° Π΄ΠΎΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΠ°ΡΡ Π΄Π΅ΡΠΎΠΊΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΌΠ° Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈ Π² ΠΊΠΎΠΌΡΠΎΡΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ° ΠΎΠ±ΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅. Π’Π°ΠΊΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ ΡΠ΅ΡΠ°ΠΏΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΠΊΡΠΈΠ½Ρ, Π½ΠΎ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠΈΡΠΊ ΠΎΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠΉ, ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ»Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ.
ΠΡΡΡΠ½ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ – http://kapelnica-ot-zapoya-tyumen0.ru
goobet
goobet
goobet
goobet
goobet
ΠΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΎ Π²ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΠ΅Π· Π½Π°Π΄Π΅ΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π΄Π°ΡΠΈΡ ΠΌΠ°ΡΡΡ ΠΏΠ»ΡΡΠΎΠ². ΠΡΠΈΠΎΠ±ΡΠ΅ΡΡΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌ: [url=http://collie.fatbb.ru/posting.php?mode=post&f=18&sid=38adf58472d384d35c97cf987e58877f]collie.fatbb.ru/posting.php?mode=post&f=18&sid=38adf58472d384d35c97cf987e58877f[/url]
I am now not sure the place you are getting your information, however good topic.
I must spend some time studying more or figuring out more.
Thank you for fantastic information I was looking for this information for my mission.
goobet
goobet
I was curious if you ever considered changing the layout
of your site? Its very well written; I love what youve got
to say. But maybe you could a little more in the way of content so people
could connect with it better. Youve got an awful lot of text for only having one or two images.
Maybe you could space it out better?
Π°Π²ΡΠΎΠ»ΠΎΠΌΠ±Π°ΡΠ΄ Π·Π°Π»ΠΎΠ³ Π°Π²ΡΠΎ
infoavtolombard-pts65.ru/nsk.html
ΠΊΡΠ΅Π΄ΠΈΡ ΠΏΠΎΠ΄ ΠΏΡΡ Ρ ΠΏΠ»ΠΎΡ ΠΎΠΉ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΠΎΠΉ
My brother recommended I may like this website.
He was entirely right. This submit truly made my day.
You cann’t consider simply how much time I had spent for this info!
Thanks!
ΠΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠΏΠ»ΠΎΠΌΠΎΠ² ΠΠ£ΠΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΉ Π ΠΎΡΡΠΈΠΈ ΠΈ Π‘ΠΠ β Ρ ΠΏΠ΅ΡΠ°ΡΡΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°ΡΡ ΠΈΠ²Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ).
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΡ Π΄Π°Π΅ΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ.
– ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ
– ΠΠΎΡΡΠ°Π²ΠΊΠ° 3β7 Π΄Π½Π΅ΠΉ
– ΠΡΠ±Π°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ
Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 2749 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ»ΡΠ³ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
ΠΡΠΏΠΈΡΡ Π΄ΠΈΠΏΠ»ΠΎΠΌ Π ΠΎΡΡΠΈΡ β ΠΎΡΠ²Π΅ΡΠΈΠΌ Π±ΡΡΡΡΠΎ, Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΠ°ΡΠΊΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅Π½ΡΡ “ΠΠ΄ΠΎΡΠΎΠ²Π°Ρ ΠΠΈΠ·Π½Ρ” β ΡΡΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΎΠΏΠ»ΠΎΡ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π² ΠΏΠ»Π΅Π½Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠΏΡΡΠ½ΡΡ Π½Π°ΡΠΊΠΎΠ»ΠΎΠ³ΠΎΠ², ΠΏΡΠΈΡ ΠΎΠ»ΠΎΠ³ΠΎΠ² ΠΈ ΠΏΡΠΈΡ ΠΎΡΠ΅ΡΠ°ΠΏΠ΅Π²ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠ΅Π°Π±ΠΈΠ»ΠΈΡΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°ΠΌ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΡΠ΅Π·Π²ΠΎΠΉ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ. ΠΡ ΡΡΡΠ΅ΠΌΠΈΠΌΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΡΠ°Π½ΠΈΡΡ ΡΠΈΠΌΠΏΡΠΎΠΌΡ, Π½ΠΎ ΠΈ Π²ΡΡΠ²ΠΈΡΡ ΠΈ ΡΡΡΡΠ°Π½ΠΈΡΡ ΠΊΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ Π·Π°Π±ΠΎΠ»Π΅Π²Π°Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΡΡΠ³ΠΈ ΠΊ ΠΏΡΠΈΡ ΠΎΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ Π²Π΅ΡΠ΅ΡΡΠ²Π°ΠΌ ΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π΄ΠΎΡΠΎΠ²ΡΡ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ.
ΠΡΡΡΠ½ΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ – http://Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ-Π²ΡΠ²ΠΎΠ΄-ΠΈΠ·-Π·Π°ΠΏΠΎΡ.ΡΡ/vyvod-iz-zapoya-na-domu-v-voronezhe.xn--p1ai/
Remarkable issues here. I’m very glad to look
your post. Thank you so much and I’m looking ahead to
contact you. Will you kindly drop me a mail?
ΠΡΡΠΏΠΏΠ° ΠΏΡΠ΅ΠΏΠ°ΡΠ°ΡΠΎΠ²
Π£Π·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ – ΠΊΠ°ΠΏΠ΅Π»ΡΠ½ΠΈΡΠ° ΠΎΡ Π·Π°ΠΏΠΎΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎ Π² ΡΠΎΡΠΈ
ΠΠΎΠΊΡΠΏΠΊΠ° Π΄ΠΈΠΏΠ»ΠΎΠΌΠΎΠ² ΠΠ£ΠΠΎΠ² Π² ΠΠΎΡΠΊΠ²Π΅ β Ρ ΠΏΠ΅ΡΠ°ΡΡΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΌΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π°ΡΡ ΠΈΠ²Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ).
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠΉ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ.
– ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ
– ΠΠΎΡΡΠ°Π²ΠΊΠ° 3β7 Π΄Π½Π΅ΠΉ
– ΠΡΠ±Π°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ
Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ 3372 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ»ΡΠ³ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ Π²Π°ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
ΠΡΠΏΠΈΡΡ Π΄ΠΈΠΏΠ»ΠΎΠΌ ΠΎ ΡΡΠ΅Π΄Π½Π΅ΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ β ΠΎΡΠ²Π΅ΡΠΈΠΌ Π±ΡΡΡΡΠΎ, Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ.
goobet
goobet
goobet
goobet
ΠΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠ°ΡΠΈΠ΅Π½ΡΡ ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΅Π³ΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
ΠΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ – Π²ΡΠ²ΠΎΠ΄ ΠΈΠ· Π·Π°ΠΏΠΎΡ ΠΎΠΌΡΠΊΠ°Ρ ΠΎΠ±Π»Π°ΡΡΡ
mostbet skachat app https://www.mostbet4005.ru
goobet
ΠΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π΄ΠΈΠΏΠ»ΠΎΠΌΡ Π»ΡΠ±ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΉ ΠΏΠΎ Π²ΡΠ³ΠΎΠ΄Π½ΡΠΌ ΡΠ΅Π½Π°ΠΌ. ΠΠ°ΠΊΠ°Π· Π΄ΠΈΠΏΠ»ΠΎΠΌΠ°, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, – ΡΡΠΎ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΏΠΈΡΡ Π΄ΠΈΠΏΠ»ΠΎΠΌ ΠΎ Π²ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ: thathwamasijobs.com/companies/diplomy-grup-24
goobet
ΠΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄Π΅ΡΠΎΠΊΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½ΠΎ ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΈΡ ΠΎΡΠΌΠΎΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°. ΠΡΠΈΡ ΠΎΡΠ΅ΡΠ°ΠΏΠ΅Π²ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΡΠ²ΠΈΡΡ Π³Π»ΡΠ±ΠΈΠ½Π½ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ ΡΡΡΠ΅ΡΡΠ° ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠ΅ Π½Π°Π²ΡΠΊΠΈ ΡΠ°ΠΌΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Ρ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΡΠΈΡΠΊ ΡΠ΅ΡΠΈΠ΄ΠΈΠ²ΠΎΠ².
ΠΠ΅ΡΠ°Π»ΡΠ½Π΅Π΅ – Π²ΡΠ°Ρ Π½Π°ΡΠΊΠΎΠ»ΠΎΠ³ Π½Π° Π΄ΠΎΠΌ ΠΏΠ»Π°ΡΠ½ΡΠΉ ΡΡΠ°
ΠΠ°ΡΠΊΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΡΠΈΠ΅Π·Π΄Π° Π²ΡΠ°ΡΠ° Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 30-60 ΠΌΠΈΠ½ΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π°Π²Π»Π΅Π½ΠΈΡ, ΠΏΡΠ»ΡΡΠ° ΠΈ ΡΡΠΎΠ²Π½Ρ ΠΊΠΈΡΠ»ΠΎΡΠΎΠ΄Π° Π² ΠΊΡΠΎΠ²ΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΡ ΠΎΡΠ΅Π½ΠΊΡ ΡΡΠΆΠ΅ΡΡΠΈ ΠΈΠ½ΡΠΎΠΊΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ°Ρ ΠΏΠΎΠ΄Π±ΠΈΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠΎΡΡΠ°Π² Π»Π΅ΠΊΠ°ΡΡΡΠ² Π΄Π»Ρ Π΄Π΅ΡΠΎΠΊΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΊΠ°ΠΏΠ΅Π»ΡΠ½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡΠΈΡΠ°Π΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΌ ΠΎΡ ΡΠΎΠΊΡΠΈΠ½ΠΎΠ², Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ΄Π½ΠΎ-ΡΠΎΠ»Π΅Π²ΠΎΠΉ Π±Π°Π»Π°Π½Ρ ΠΈ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΎΠ².
Π Π°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π»ΡΡΡΠ΅ – http://narcolog-na-dom-sochi00.ru/narkolog-na-dom-kruglosutochno-sochi/
ΠΠ²ΡΠΎΠ³ΠΈΠ΄ https://avtogid.in.ua Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΊΡΠ°ΠΈΠ½ΡΠΊΠΈΠΉ ΠΏΠΎΡΡΠ°Π» Ρ Π½ΠΎΠ²ΠΎΡΡΡΠΌΠΈ, ΠΎΠ±Π·ΠΎΡΠ°ΠΌΠΈ, ΡΠΎΠ²Π΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ Π°Π²ΡΠΎΠ²Π»Π°Π΄Π΅Π»ΡΡΠ΅Π²